home *** CD-ROM | disk | FTP | other *** search
/ Aminet 23 / Aminet 23 (1998)(GTI - Schatztruhe)[!][Feb 1998].iso / Aminet / misc / emu / amiSPIMsrc.lha / Tests / tt.be.s < prev    next >
Text File  |  1994-01-17  |  55KB  |  4,128 lines

  1. # SPIM S20 MIPS simulator.
  2. # A torture test for the SPIM simulator.
  3. # Version for big-endian systems.
  4. # Copyright (C) 1990-1994 James Larus, larus@cs.wisc.edu.
  5. # ALL RIGHTS RESERVED.
  6. #
  7. # SPIM is distributed under the following conditions:
  8. #
  9. # You may make copies of SPIM for your own use and modify those copies.
  10. #
  11. # All copies of SPIM must retain my name and copyright notice.
  12. #
  13. # You may not sell SPIM or distributed SPIM in conjunction with a commerical
  14. # product or service without the expressed written consent of James Larus.
  15. #
  16. # THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  17. # IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  18. # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  19. # PURPOSE.
  20. #
  21.  
  22. # $Header: /home/primost/larus/Software/SPIM/Tests/RCS/tt.be.s,v 1.37 1994/01/18 03:23:44 larus Exp larus $
  23.  
  24.  
  25.     .data
  26. saved_ret_pc:    .word 0        # Holds PC to return from main
  27. m3:    .asciiz "The next few lines should contain exception error messages\n"
  28. m4:    .asciiz "Done with exceptions\n\n"
  29.     .text
  30.     .globl main
  31. main:
  32.     sw $31 saved_ret_pc
  33.  
  34. #
  35. # The first thing to do is to test the exceptions:
  36. #
  37.     li $v0 4    # syscall 4 (print_str)
  38.     la $a0 m3
  39.     syscall
  40.  
  41. # Exception 1 (INT) -- Not implemented yet
  42. # Exception 4 (ADEL)
  43.     li $t0 0x400000
  44.     lw $3 1($t0)
  45. # Exception 5 (ADES)
  46.     sw $3 1($t0)
  47. # Exception 6 (IBUS) -- Can't test and continue
  48. # Exception 7 (DBUS)
  49.     lw $3 10000000($t0)
  50. # Exception 8 (SYSCALL) -- Not implemented
  51. # Exception 9 (BKPT)
  52.     break 0
  53. # Exception 10 (RI) -- Not implemented (can't enter bad instructions)
  54. # Exception 12 (overflow)
  55.     lui $t0 0x7fffffff
  56.     add $t0 $t0 $t0
  57.     li $v0 4    # syscall 4 (print_str)
  58.     la $a0 m4
  59.     syscall
  60.  
  61. #
  62. # Try modifying R0
  63. #
  64.     add $0, $0, 1
  65.     bnez $0 fail
  66.  
  67. #
  68. # Now, test each instruction
  69. #
  70.  
  71.     .data
  72. add_:    .asciiz "Testing ADD\n"
  73.     .text
  74.     li $v0 4    # syscall 4 (print_str)
  75.     la $a0 add_
  76.     syscall
  77.  
  78.     li $2 1
  79.     li $3 -1
  80.  
  81.     add $4, $0, $0
  82.     bnez $4 fail
  83.     add $4, $0, $2
  84.     bne $4 1 fail
  85.     add $4, $4, $3
  86.     bnez $4 fail
  87.  
  88.  
  89.     .data
  90. addi_:    .asciiz "Testing ADDI\n"
  91.     .text
  92.     li $v0 4    # syscall 4 (print_str)
  93.     la $a0 addi_
  94.     syscall
  95.  
  96.     addi $4, $0, 0
  97.     bnez $4 fail
  98.     addi $4, $0, 1
  99.     bne $4 1 fail
  100.     addi $4, $4, -1
  101.     bnez $4 fail
  102.  
  103.  
  104.     .data
  105. addiu_:    .asciiz "Testing ADDIU\n"
  106.     .text
  107.     li $v0 4    # syscall 4 (print_str)
  108.     la $a0 addiu_
  109.     syscall
  110.  
  111.     addiu $4, $0, 0
  112.     bnez $4 fail
  113.     addiu $4, $0, 1
  114.     bne $4 1 fail
  115.     addiu $4, $4, -1
  116.     bnez $4 fail
  117.  
  118.     lui $2 0x7fffffff
  119.     addiu $2 $2 0x7fffffff    # should not trap
  120.     bne $2 -2 fail
  121.  
  122.  
  123.     .data
  124. addu_:    .asciiz "Testing ADDU\n"
  125.     .text
  126.     li $v0 4    # syscall 4 (print_str)
  127.     la $a0 addu_
  128.     syscall
  129.  
  130.     li $2 1
  131.     li $3 -1
  132.  
  133.     addu $4, $0, $0
  134.     bnez $4 fail
  135.     addu $4, $0, $2
  136.     bne $4 1 fail
  137.     addu $4, $4, $3
  138.     bnez $4 fail
  139.  
  140.     lui $2 0x7fffffff
  141.     addu $2 $2 $2        # should not trap
  142.     bne $2 -2 fail
  143.  
  144.  
  145.     .data
  146. and_:    .asciiz "Testing AND\n"
  147.     .text
  148.     li $v0 4    # syscall 4 (print_str)
  149.     la $a0 and_
  150.     syscall
  151.  
  152.     li $2 1
  153.     li $3 -1
  154.  
  155.     and $4 $0 $0
  156.     bnez $4 fail
  157.     and $4 $2 $2
  158.     beqz $4 fail
  159.     and $4 $2 $3
  160.     bne $4 1 fail
  161.  
  162.  
  163.     .data
  164. andi_:    .asciiz "Testing ANDI\n"
  165.     .text
  166.     li $v0 4    # syscall 4 (print_str)
  167.     la $a0 andi_
  168.     syscall
  169.  
  170.     li $2 1
  171.     li $3 -1
  172.  
  173.     andi $4 $0 0
  174.     bnez $4 fail
  175.     and $4 $2 1
  176.     beqz $4 fail
  177.     and $4 $2 -1
  178.     bne $4 1 fail
  179.     and $4 $3 -1
  180.     bne $4 $3 fail
  181.  
  182.  
  183.     .data
  184. beq_:    .asciiz "Testing BEQ\n"
  185.     .text
  186.     li $v0 4    # syscall 4 (print_str)
  187.     la $a0 beq_
  188.     syscall
  189.  
  190.     li $2 -1
  191.     li $3 1
  192.  
  193.     beq $0 $0 l1
  194.     j fail
  195. l1:    beq $2 $2 l2
  196.     j fail
  197. l2:    beq $3 $2 fail
  198.  
  199.     beq $2 $2 far_away    # Check long branch
  200.     j fail
  201. come_back:
  202.  
  203.     li $2 3
  204. l2_1:    sub $2 $2 1
  205.     bnez $2, l2_1
  206.  
  207.  
  208.     .data
  209. bgez_:    .asciiz "Testing BGEZ\n"
  210.     .text
  211.     li $v0 4    # syscall 4 (print_str)
  212.     la $a0 bgez_
  213.     syscall
  214.  
  215.     li $2 -1
  216.     li $3 1
  217.  
  218.     bgez $0 l3
  219.     j fail
  220. l3:    bgez $3 l4
  221.     j fail
  222. l4:    bgez $2 fail
  223.  
  224.  
  225.     .data
  226. bgezal_:.asciiz "Testing BGEZAL\n"
  227.     .text
  228.     li $v0 4    # syscall 4 (print_str)
  229.     la $a0 bgezal_
  230.     syscall
  231.  
  232.     li $2 -1
  233.     li $3 1
  234.  
  235.     bgezal $0 l5
  236.     j fail
  237.     bgezal $2 fail
  238. l5:    bgezal $3 l6
  239. l55:    j fail
  240. l6:    la $4 l55
  241.     bne $31 $4 fail
  242.  
  243.  
  244.     .data
  245. bgtz_:    .asciiz "Testing BGTZ\n"
  246.     .text
  247.     li $v0 4    # syscall 4 (print_str)
  248.     la $a0 bgtz_
  249.     syscall
  250.  
  251.     li $2 -1
  252.     li $3 1
  253.  
  254.     bgtz $0 fail
  255. l7:    bgtz $3 l8
  256.     j fail
  257. l8:    bgtz $2 fail
  258.  
  259.  
  260.     .data
  261. blez_:    .asciiz "Testing BLEZ\n"
  262.     .text
  263.     li $v0 4    # syscall 4 (print_str)
  264.     la $a0 blez_
  265.     syscall
  266.  
  267.     li $2 -1
  268.     li $3 1
  269.  
  270.     blez $0 l9
  271.     j fail
  272. l9:    blez $2 l10
  273.     j fail
  274. l10:    blez $3 fail
  275.  
  276.  
  277.     .data
  278. bltz_:    .asciiz "Testing BLTZ\n"
  279.     .text
  280.     li $v0 4    # syscall 4 (print_str)
  281.     la $a0 bltz_
  282.     syscall
  283.  
  284.     li $2 -1
  285.     li $3 1
  286.  
  287.     bltz $0 fail
  288. l11:    bltz $2 l12
  289.     j fail
  290. l12:    bltz $3 fail
  291.  
  292.  
  293.     .data
  294. bltzal_:.asciiz "Testing BLTZAL\n"
  295.     .text
  296.     li $v0 4    # syscall 4 (print_str)
  297.     la $a0 bltzal_
  298.     syscall
  299.  
  300.     li $2 -1
  301.     li $3 1
  302.  
  303.     bltzal $0 fail
  304.     bltzal $3 fail
  305. l13:    bltzal $2 l15
  306. l14:    j fail
  307. l15:    la $4 l14
  308.     bne $31 $4 fail
  309.  
  310.  
  311.     .data
  312. bne_:    .asciiz "Testing BNE\n"
  313.     .text
  314.     li $v0 4    # syscall 4 (print_str)
  315.     la $a0 bne_
  316.     syscall
  317.  
  318.     li $2 -1
  319.     li $3 1
  320.  
  321.     bne $0 $0 fail
  322.     bne $2 $2 fail
  323.     bne $3 $2 l16
  324. l16:
  325.  
  326.  
  327.     .data
  328. break_:    .asciiz "Testing BREAK\nExpect a exception message:\n  "
  329.     .text
  330.     li $v0 4    # syscall 4 (print_str)
  331.     la $a0 break_
  332.     syscall
  333.  
  334.     break 3
  335.  
  336.  
  337. # COPz is not implemented or checked
  338.  
  339.  
  340.     .data
  341. ccp_:    .asciiz "Testing move to/from coprocessor control z\n"
  342.     .text
  343.     li $v0 4    # syscall 4 (print_str)
  344.     la $a0 ccp_
  345.     syscall
  346.  
  347.     li $2 0x7f7f
  348.     ctc0 $2 $3
  349.     cfc0 $4 $3
  350.     bne $2 $4 fail
  351.     li $2 0x7f7f
  352.     ctc1 $2 $3
  353.     cfc1 $4 $3
  354.     bne $2 $4 fail
  355.     li $2 0x7f7f
  356.     ctc2 $2 $3
  357.     cfc2 $4 $3
  358.     bne $2 $4 fail
  359.     li $2 0x7f7f
  360.     ctc3 $2 $3
  361.     cfc3 $4 $3
  362.     bne $2 $4 fail
  363.  
  364.  
  365.     .data
  366. div_:    .asciiz "Testing DIV\n"
  367. div2_:    .asciiz "Expect exception caused by divide by 0:\n  "
  368.     .text
  369.     li $v0 4    # syscall 4 (print_str)
  370.     la $a0 div_
  371.     syscall
  372.  
  373.     li $2 4
  374.     li $3 2
  375.     li $4 -2
  376.  
  377.     div $5 $2 $3
  378.     bne $5 2 fail
  379.     mfhi $5
  380.     bne $5 0 fail
  381.  
  382.     div $5 $2 $4
  383.     bne $5 -2 fail
  384.     mfhi $5
  385.     bne $5 0 fail
  386.  
  387.     li $v0 4    # syscall 4 (print_str)
  388.     la $a0 div2_
  389.     syscall
  390.     div $5 $2 $0
  391.  
  392.  
  393.     .data
  394. divu_:    .asciiz "Testing DIVU\n"
  395. divu2_:    .asciiz "Expect exception caused by divide by 0:\n  "
  396.     .text
  397.     li $v0 4    # syscall 4 (print_str)
  398.     la $a0 divu_
  399.     syscall
  400.  
  401.     li $2 4
  402.     li $3 2
  403.     li $4 -2
  404.  
  405.     divu $5 $2 $3
  406.     bne $5 2 fail
  407.     mfhi $5
  408.     bne $5 0 fail
  409.  
  410.     divu $0 $2 $3
  411.     mflo $5
  412.     bne $5 2 fail
  413.     mfhi $5
  414.     bne $5 0 fail
  415.  
  416.     divu $5 $2 $4
  417.     bne $5 0 fail
  418.     mfhi $5
  419.     bne $5 4 fail
  420.  
  421.     li $v0 4    # syscall 4 (print_str)
  422.     la $a0 divu2_
  423.     syscall
  424.     divu $5 $2 $0
  425.  
  426.  
  427.     .data
  428. j_:    .asciiz "Testing J\n"
  429.     .text
  430.     li $v0 4    # syscall 4 (print_str)
  431.     la $a0 j_
  432.     syscall
  433.  
  434.     j l17
  435.     j fail
  436. l17:
  437.  
  438.  
  439.     .data
  440. jal_:    .asciiz "Testing JAL\n"
  441.     .text
  442.     li $v0 4    # syscall 4 (print_str)
  443.     la $a0 jal_
  444.     syscall
  445.  
  446.     jal l18
  447. l19:    j l20
  448. l18:    la $4 l19
  449.     bne $31 $4 fail
  450.     jr $31
  451. l20:
  452.  
  453.  
  454.     .data
  455. jalr_:    .asciiz "Testing JALR\n"
  456. jalr2_:    .asciiz "Expect an non-word boundary exception:\n  "
  457.     .text
  458.     li $v0 4    # syscall 4 (print_str)
  459.     la $a0 jalr_
  460.     syscall
  461.  
  462.     la $2 l21
  463.     jalr $3, $2
  464. l23:    j l22
  465. l21:    la $4 l23
  466.     bne $3 $4 fail
  467.     jr $3
  468. l22:    li $v0 4    # syscall 4 (print_str)
  469.     la $a0 jalr2_
  470.     syscall
  471.     la $2 l24
  472.     add $2 $2 2
  473. l24:    jalr $3 $2
  474.  
  475.  
  476.     .data
  477. jr_:    .asciiz "Testing JR\n"
  478. jr2_:    .asciiz "Expect an non-word boundary exception:\n  "
  479.     .text
  480.     li $v0 4    # syscall 4 (print_str)
  481.     la $a0 jr_
  482.     syscall
  483.  
  484.     la $2 l25
  485.     jr $2
  486.     j fail
  487. l25:    li $v0 4    # syscall 4 (print_str)
  488.     la $a0 jr2_
  489.     syscall
  490.     la $2 l27
  491.     add $2 $2 2
  492. l27:    jr $2
  493.  
  494.  
  495.     .data
  496. la_:    .asciiz "Testing LA\n"
  497.     .text
  498.     li $v0 4    # syscall 4 (print_str)
  499.     la $a0 la_
  500.     syscall
  501.  
  502.     # Simple cases already tested
  503.     li $4 101
  504.     la $5 10($4)
  505.     bne $5 111 fail
  506.  
  507.  
  508.     .data
  509. lb_:    .asciiz "Testing LB\n"
  510. lb2_:    .asciiz "Expect an address error exceptions:\n  "
  511. lbd_:    .byte 1, -1, 0, 128
  512. lbd1_:    .word 0x76543210, 0xfedcba98
  513.     .text
  514.     li $v0 4    # syscall 4 (print_str)
  515.     la $a0 lb_
  516.     syscall
  517.  
  518.     la $2 lbd_
  519.     lb $3 0($2)
  520.     bne $3 1 fail
  521.     lb $3 1($2)
  522.     bne $3 -1 fail
  523.     lb $3 2($2)
  524.     bne $3 0 fail
  525.     lb $3 3($2)
  526.     bne $3 0xffffff80 fail
  527.  
  528.     la $t0 lbd1_
  529.     lb $t1 0($t0)
  530.     bne $t1 0x76 fail
  531.     lb $t1 1($t0)
  532.     bne $t1 0x54 fail
  533.     lb $t1 2($t0)
  534.     bne $t1 0x32 fail
  535.     lb $t1 3($t0)
  536.     bne $t1 0x10 fail
  537.     lb $t1 4($t0)
  538.     bne $t1 0xfffffffe fail
  539.     lb $t1 5($t0)
  540.     bne $t1 0xffffffdc fail
  541.     lb $t1 6($t0)
  542.     bne $t1 0xffffffba fail
  543.     lb $t1 7($t0)
  544.     bne $t1 0xffffff98 fail
  545.  
  546.     li $v0 4    # syscall 4 (print_str)
  547.     la $a0 lb2_
  548.     syscall
  549.  
  550.     lb $3 1000000($sp)
  551.  
  552.     .data
  553. lbu_:    .asciiz "Testing LBU\n"
  554.     .text
  555.     li $v0 4    # syscall 4 (print_str)
  556.     la $a0 lbu_
  557.     syscall
  558.  
  559.     la $2 lbd_
  560.     lbu $3 0($2)
  561.     bne $3 1 fail
  562.     lbu $3 1($2)
  563.     bne $3 0xff fail
  564.     lbu $3 2($2)
  565.     bne $3 0 fail
  566.     lbu $3 3($2)
  567.     bne $3 128 fail
  568.  
  569.     la $t0 lbd1_
  570.     lbu $t1 0($t0)
  571.     bne $t1 0x76 fail
  572.     lbu $t1 1($t0)
  573.     bne $t1 0x54 fail
  574.     lbu $t1 2($t0)
  575.     bne $t1 0x32 fail
  576.     lbu $t1 3($t0)
  577.     bne $t1 0x10 fail
  578.     lbu $t1 4($t0)
  579.     bne $t1 0xfe fail
  580.     lbu $t1 5($t0)
  581.     bne $t1 0xdc fail
  582.     lbu $t1 6($t0)
  583.     bne $t1 0xba fail
  584.     lbu $t1 7($t0)
  585.     bne $t1 0x98 fail
  586.  
  587.     li $v0 4    # syscall 4 (print_str)
  588.     la $a0 lb2_
  589.     syscall
  590.  
  591.     lbu $3 1000000($sp)
  592.  
  593.  
  594.     .data
  595. ld_:    .asciiz "Testing LD\n"
  596. ld2_:    .asciiz "Expect two address error exceptions:\n"
  597. ldd_:    .word 1, -1, 0, 0x8000000
  598.     .text
  599.     li $v0 4    # syscall 4 (print_str)
  600.     la $a0 ld_
  601.     syscall
  602.  
  603.     la $2 ldd_
  604.     ld $3 0($2)
  605.     bne $3 1 fail
  606.     bne $4 -1 fail
  607.     ld $3 8($2)
  608.     bne $3 0 fail
  609.     bne $4 0x8000000 fail
  610.  
  611.     li $v0 4    # syscall 4 (print_str)
  612.     la $a0 ld2_
  613.     syscall
  614.  
  615.     ld $3 1000000($sp)
  616.     ld $3 1000001($sp)
  617.  
  618.  
  619.     .data
  620. lh_:    .asciiz "Testing LH\n"
  621. lh2_:    .asciiz "Expect two address error exceptions:\n"
  622. lhd_:    .half 1, -1, 0, 0x8000
  623.     .text
  624.     li $v0 4    # syscall 4 (print_str)
  625.     la $a0 lh_
  626.     syscall
  627.  
  628.     la $2 lhd_
  629.     lh $3 0($2)
  630.     bne $3 1 fail
  631.     lh $3 2($2)
  632.     bne $3 -1 fail
  633.     lh $3 4($2)
  634.     bne $3 0 fail
  635.     lh $3 6($2)
  636.     bne $3 0xffff8000 fail
  637.  
  638.     li $v0 4    # syscall 4 (print_str)
  639.     la $a0 lh2_
  640.     syscall
  641.  
  642.     lh $3 1000000($sp)
  643.     lh $3 1000001($sp)
  644.  
  645.     .data
  646. lhu_:    .asciiz "Testing LHU\n"
  647.     .text
  648.     li $v0 4    # syscall 4 (print_str)
  649.     la $a0 lhu_
  650.     syscall
  651.  
  652.     la $2 lhd_
  653.     lhu $3 0($2)
  654.     bne $3 1 fail
  655.     lhu $3 2($2)
  656.     bne $3 0xffff fail
  657.     lhu $3 4($2)
  658.     bne $3 0 fail
  659.     lhu $3 6($2)
  660.     bne $3 0x8000 fail
  661.  
  662.     li $v0 4    # syscall 4 (print_str)
  663.     la $a0 lh2_
  664.     syscall
  665.  
  666.     lhu $3 1000000($sp)
  667.     lhu $3 1000001($sp)
  668.  
  669.  
  670.     .data
  671. lui_:    .asciiz "Testing LUI\n"
  672.     .text
  673.     li $v0 4    # syscall 4 (print_str)
  674.     la $a0 lui_
  675.     syscall
  676.  
  677.     lui $2 0
  678.     bne $2 $0 fail
  679.     lui $2 1
  680.     srl $2 $2 16
  681.     addiu $2 $2 -1    # Don't do compare directly since it uses LUI
  682.     bne $2 $0 fail
  683.     lui $2 1
  684.     andi $2 $2 0xffff
  685.     bne $2 $0 fail
  686.     lui $2 -1
  687.     srl $2 $2 16
  688.     addiu $2 $2 1
  689.     andi $2 $2 0xffff
  690.     bne $2 $0 fail
  691.  
  692.  
  693.     .data
  694. lw_:    .asciiz "Testing LW\n"
  695. lwd_:    .word 1, -1, 0, 0x8000000
  696.     .text
  697.     li $v0 4    # syscall 4 (print_str)
  698.     la $a0 lw_
  699.     syscall
  700.  
  701.     la $2 lwd_
  702.     lw $3 0($2)
  703.     bne $3 1 fail
  704.     lw $3 4($2)
  705.     bne $3 -1 fail
  706.     lw $3 8($2)
  707.     bne $3 0 fail
  708.     lw $3 12($2)
  709.     bne $3 0x8000000 fail
  710.  
  711.     add $2 $2 12
  712.     lw $3 -12($2)
  713.     bne $3 1 fail
  714.     lw $3 -8($2)
  715.     bne $3 -1 fail
  716.     lw $3 -4($2)
  717.     bne $3 0 fail
  718.     lw $3 0($2)
  719.     bne $3 0x8000000 fail
  720.  
  721.     li $v0 4    # syscall 4 (print_str)
  722.     la $a0 lh2_
  723.     syscall
  724.  
  725.     lw $3 1000000($sp)
  726.     lw $3 1000001($sp)
  727.  
  728.  
  729.     .data
  730. lwl_:    .asciiz "Testing LWL\n"
  731.     .align 2
  732. lwld_:    .byte 0 1 2 3 4 5 6 7
  733.     .text
  734.     li $v0 4    # syscall 4 (print_str)
  735.     la $a0 lwl_
  736.     syscall
  737.  
  738.     la $2 lwld_
  739.     move $3 $0
  740.     lwl $3 0($2)
  741.     bne $3 0x10203 fail
  742.     move $3 $0
  743.     lwl $3 1($2)
  744.     bne $3 0x1020300 fail
  745.     li $3 5
  746.     lwl $3 1($2)
  747.     bne $3 0x1020305 fail
  748.     move $3 $0
  749.     lwl $3 2($2)
  750.     bne $3 0x2030000 fail
  751.     li $3 5
  752.     lwl $3 2($2)
  753.     bne $3 0x2030005 fail
  754.     move $3 $0
  755.     lwl $3 3($2)
  756.     bne $3 0x3000000 fail
  757.     li $3 5
  758.     lwl $3 3($2)
  759.     bne $3 0x3000005 fail
  760.  
  761.     li $v0 4    # syscall 4 (print_str)
  762.     la $a0 lh2_
  763.     syscall
  764.  
  765.     lwl $3 1000000($sp)
  766.     lwl $3 1000001($sp)
  767.  
  768.  
  769.     .data
  770. lwr_:    .asciiz "Testing LWR\n"
  771.     .align 2
  772. lwrd_:    .byte 0 1 2 3 4 5 6 7
  773.     .text
  774.     li $v0 4    # syscall 4 (print_str)
  775.     la $a0 lwr_
  776.     syscall
  777.  
  778.     la $2 lwrd_
  779.     li $3 0x0505
  780.     lwr $3 0($2)
  781.     bne $3 0x0500 fail
  782.     move $3 $0
  783.     lwr $3 1($2)
  784.     bne $3 0x01 fail
  785.     li $3 0x505
  786.     lwr $3 1($2)
  787.     bne $3 0x01 fail
  788.     move $3 $0
  789.     lwr $3 2($2)
  790.     bne $3 0x0102 fail
  791.     li $3 0x050505
  792.     lwr $3 2($2)
  793.     bne $3 0x0102 fail
  794.     move $3 $0
  795.     lwr $3 3($2)
  796.     bne $3 0x010203 fail
  797.     li $3 0x05050505
  798.     lwr $3 3($2)
  799.     bne $3 0x010203 fail
  800.  
  801.     li $v0 4    # syscall 4 (print_str)
  802.     la $a0 lh2_
  803.     syscall
  804.  
  805.     lwr $3 1000000($sp)
  806.     lwr $3 1000001($sp)
  807.  
  808.     .data
  809. mcp_:    .asciiz "Testing move to/from coprocessor z\n"
  810.     .text
  811.     li $v0 4    # syscall 4 (print_str)
  812.     la $a0 mcp_
  813.     syscall
  814.  
  815.     li $2 0x7f7f
  816.     mtc0 $2 $3
  817.     mfc0 $4 $3
  818.     bne $2 $4 fail
  819.     li $2 0x7f7f
  820.     mtc1 $2 $3
  821.     mfc1 $4 $f3
  822.     bne $2 $4 fail
  823.     li $2 0x7f7f
  824.     li $3 0xf7f7
  825.     mtc1.d $2 $4
  826.     mfc1.d $6 $4
  827.     bne $2 $6 fail
  828.     bne $3 $7 fail
  829.     li $2 0x7f7f
  830.     mtc2 $2 $3
  831.     mfc2 $4 $3
  832.     bne $2 $4 fail
  833.     li $2 0x7f7f
  834.     mtc3 $2 $3
  835.     mfc3 $4 $3
  836.     bne $2 $4 fail
  837.  
  838.  
  839.     .data
  840. hilo_:    .asciiz "Testing move to/from HI/LO\n"
  841.     .text
  842.     li $v0 4    # syscall 4 (print_str)
  843.     la $a0 hilo_
  844.     syscall
  845.  
  846.     mthi $0
  847.     mfhi $2
  848.     bnez $2 fail
  849.     mtlo $0
  850.     mflo $2
  851.     bnez $2 fail
  852.     li $2 1
  853.     mthi $2
  854.     mfhi $3
  855.     bne $3 $2 fail
  856.     li $2 1
  857.     mtlo $2
  858.     mflo $3
  859.     bne $3 $2 fail
  860.     li $2 -1
  861.     mthi $2
  862.     mfhi $3
  863.     bne $3 $2 fail
  864.     li $2 -1
  865.     mtlo $2
  866.     mflo $3
  867.     bne $3 $2 fail
  868.  
  869.  
  870.     .data
  871. mul_:    .asciiz "Testing MUL\n"
  872.     .text
  873.     li $v0 4    # syscall 4 (print_str)
  874.     la $a0 mul_
  875.     syscall
  876.  
  877.     mul $2 $0 $0
  878.     bnez $2 fail
  879.     mfhi $3
  880.     bnez $3 fail
  881.     mflo $3
  882.     bnez $3 fail
  883.  
  884.     li $4, 1
  885.     mul $2 $4 $4
  886.     bne $2 1 fail
  887.     mfhi $3
  888.     bnez $3 fail
  889.     mflo $3
  890.     bne $3 1 fail
  891.  
  892.     li $4, -1
  893.     mul $2 $4 $4
  894.     bne $2 1 fail
  895.     mfhi $3
  896.     bnez $3 fail
  897.     mflo $3
  898.     bne $3 1 fail
  899.  
  900.     li $4, -1
  901.     li $5, 1
  902.     mul $2 $4 $5
  903.     bne $2 -1 fail
  904.     mfhi $3
  905.     bne $3 -1 fail
  906.     mflo $3
  907.     bne $3 -1 fail
  908.  
  909.     li $4, 0x10000
  910.     mul $2 $4 $4
  911.     bne $2 0 fail
  912.     mfhi $3
  913.     bne $3 1 fail
  914.     mflo $3
  915.     bne $3 0 fail
  916.  
  917.     li $4, 0x80000000
  918.     mul $2 $4 $4
  919.     bne $2 0 fail
  920.     mfhi $3
  921.     bne $3 0x40000000 fail
  922.     mflo $3
  923.     bne $3 0 fail
  924.  
  925.  
  926.     .data
  927. multu_:    .asciiz "Testing MULTU\n"
  928.     .text
  929.     li $v0 4    # syscall 4 (print_str)
  930.     la $a0 multu_
  931.     syscall
  932.  
  933.     multu $0 $0
  934.     mfhi $3
  935.     bnez $3 fail
  936.     mflo $3
  937.     bnez $3 fail
  938.  
  939.     li $4, 1
  940.     multu $4 $4
  941.     mfhi $3
  942.     bnez $3 fail
  943.     mflo $3
  944.     bne $3 1 fail
  945.  
  946.     li $4, -1
  947.     multu $4 $4
  948.     mfhi $3
  949.     bne $3 0xfffffffe fail
  950.     mflo $3
  951.     bne $3 1 fail
  952.  
  953.     li $4, -1
  954.     li $5, 0
  955.     multu $4 $5
  956.     mfhi $3
  957.     bne $3 0 fail
  958.     mflo $3
  959.     bne $3 0 fail
  960.  
  961.     li $4, -1
  962.     li $5, 1
  963.     multu $4 $5
  964.     mfhi $3
  965.     bne $3 0 fail
  966.     mflo $3
  967.     bne $3 -1 fail
  968.  
  969.     li $4, 0x10000
  970.     multu $4 $4
  971.     mfhi $3
  972.     bne $3 1 fail
  973.     mflo $3
  974.     bne $3 0 fail
  975.  
  976.     li $4, 0x80000000
  977.     multu $4 $4
  978.     mfhi $3
  979.     bne $3 0x40000000 fail
  980.     mflo $3
  981.     bne $3 0 fail
  982.  
  983.     li $3, 0xcecb8f27
  984.     li $4, 0xfd87b5f2
  985.     multu $3 $4
  986.     mfhi $3
  987.     bne $3 0xcccccccb fail
  988.     mflo $3
  989.     bne $3 0x7134e5de fail
  990.  
  991.  
  992.     .data
  993. mulo_:    .asciiz "Testing MULO\n"
  994. mulo1_:    .asciiz "Expect an exception:\n  "
  995.     .text
  996.     li $v0 4    # syscall 4 (print_str)
  997.     la $a0 mulo_
  998.     syscall
  999.  
  1000.     mulo $2 $0 $0
  1001.     bne $2 0 fail
  1002.  
  1003.     li $4, 1
  1004.     mulo $2 $4 $4
  1005.     bne $2 1 fail
  1006.  
  1007.     li $4, -1
  1008.     mulo $2 $4 $4
  1009.     bne $2 1 fail
  1010.  
  1011.     li $4, -1
  1012.     li $5, 1
  1013.     mulo $2 $4 $5
  1014.     bne $2 -1 fail
  1015.  
  1016.     li $v0 4    # syscall 4 (print_str)
  1017.     la $a0 mulo1_
  1018.     syscall
  1019.  
  1020.     li $4, 0x10000
  1021.     mulo $2 $4 $4
  1022.     bne $2 0 fail
  1023.  
  1024.  
  1025.     .data
  1026. nor_:    .asciiz "Testing NOR\n"
  1027.     .text
  1028.     li $v0 4    # syscall 4 (print_str)
  1029.     la $a0 nor_
  1030.     syscall
  1031.  
  1032.     li $2 1
  1033.     li $3 -1
  1034.  
  1035.     nor $4 $0 $0
  1036.     bne $4 -1 fail
  1037.     nor $4 $2 $2
  1038.     bne $4 0xfffffffe fail
  1039.     nor $4 $2 $3
  1040.     bne $4 0 fail
  1041.  
  1042.  
  1043.     .data
  1044. or_:    .asciiz "Testing OR\n"
  1045.     .text
  1046.     li $v0 4    # syscall 4 (print_str)
  1047.     la $a0 or_
  1048.     syscall
  1049.  
  1050.     li $2 1
  1051.     li $3 -1
  1052.  
  1053.     or $4 $0 $0
  1054.     bne $4 0 fail
  1055.     or $4 $2 $2
  1056.     bne $4 1 fail
  1057.     or $4 $2 $3
  1058.     bne $4 -1 fail
  1059.  
  1060.  
  1061.     .data
  1062. ori_:    .asciiz "Testing ORI\n"
  1063.     .text
  1064.     li $v0 4    # syscall 4 (print_str)
  1065.     la $a0 ori_
  1066.     syscall
  1067.  
  1068.     li $2 1
  1069.     li $3 -1
  1070.  
  1071.     ori $4 $0 0
  1072.     bne $4 0 fail
  1073.     ori $4 $2 1
  1074.     bne $4 1 fail
  1075.     ori $4 $2 -1
  1076.     bne $4 0xffffffff fail
  1077.  
  1078.  
  1079. # RFE tested previously
  1080.  
  1081.  
  1082.     .data
  1083. sb_:    .asciiz "Testing SB\n"
  1084. sb2_:    .asciiz "Expect an address error exceptions:\n  "
  1085.     .align 2
  1086. sbd_:    .byte 0, 0, 0, 0
  1087.     .text
  1088.     li $v0 4    # syscall 4 (print_str)
  1089.     la $a0 sb_
  1090.     syscall
  1091.  
  1092.     li $3, 1
  1093.     la $2 sbd_
  1094.     sb $3 0($2)
  1095.     lw $4 0($2)
  1096.     bne $4 0x1000000 fail
  1097.     li $3 2
  1098.     sb $3 1($2)
  1099.     lw $4 0($2)
  1100.     bne $4 0x1020000 fail
  1101.     li $3 3
  1102.     sb $3 2($2)
  1103.     lw $4 0($2)
  1104.     bne $4 0x1020300 fail
  1105.     li $3 4
  1106.     sb $3 3($2)
  1107.     lw $4 0($2)
  1108.     bne $4 0x1020304 fail
  1109.  
  1110.  
  1111.     li $v0 4    # syscall 4 (print_str)
  1112.     la $a0 sb2_
  1113.     syscall
  1114.  
  1115.     sb $3 1000000($sp)
  1116.  
  1117.  
  1118.     .data
  1119. sd_:    .asciiz "Testing SD\n"
  1120. sd2_:    .asciiz "Expect two address error exceptions:\n"
  1121.     .align 2
  1122. sdd_:    .word 0, 0, 0, 0
  1123.     .text
  1124.     li $v0 4    # syscall 4 (print_str)
  1125.     la $a0 sd_
  1126.     syscall
  1127.  
  1128.     li $3, 0x7f7f7f7f
  1129.     li $4, 0xf7f7f7f7
  1130.     la $2 sdd_
  1131.     sd $3 0($2)
  1132.     ld $5 0($2)
  1133.     bne $3 $5 fail
  1134.     bne $4 $4 fail
  1135.  
  1136.     li $v0 4    # syscall 4 (print_str)
  1137.     la $a0 sd2_
  1138.     syscall
  1139.  
  1140.     sd $3 1000000($sp)
  1141.     sd $3 1000001($sp)
  1142.  
  1143.  
  1144.     .data
  1145. sh_:    .asciiz "Testing SH\n"
  1146. sh2_:    .asciiz "Expect two address error exceptions:\n"
  1147.     .align 2
  1148. shd_:    .byte 0, 0, 0, 0
  1149.     .text
  1150.     li $v0 4    # syscall 4 (print_str)
  1151.     la $a0 sh_
  1152.     syscall
  1153.  
  1154.     li $3, 1
  1155.     la $2 shd_
  1156.     sh $3 0($2)
  1157.     lw $4 0($2)
  1158.     bne $4 0x10000 fail
  1159.     li $3 2
  1160.     sh $3 2($2)
  1161.     lw $4 0($2)
  1162.     bne $4 0x10002 fail
  1163.  
  1164.     li $v0 4    # syscall 4 (print_str)
  1165.     la $a0 sh2_
  1166.     syscall
  1167.  
  1168.     sh $3 1000000($sp)
  1169.     sh $3 1000001($sp)
  1170.  
  1171.  
  1172.     .data
  1173. sll_:    .asciiz "Testing SLL\n"
  1174.     .text
  1175.     li $v0 4    # syscall 4 (print_str)
  1176.     la $a0 sll_
  1177.     syscall
  1178.  
  1179.     li $2 1
  1180.  
  1181.     sll $3 $2 0
  1182.     bne $3 1 fail
  1183.     sll $3 $2 1
  1184.     bne $3 2 fail
  1185.     sll $3 $2 16
  1186.     bne $3 0x10000 fail
  1187.     sll $3 $2 32
  1188.     bne $3 1 fail
  1189.  
  1190.  
  1191.     .data
  1192. sllv_:    .asciiz "Testing SLLV\n"
  1193.     .text
  1194.     li $v0 4    # syscall 4 (print_str)
  1195.     la $a0 sllv_
  1196.     syscall
  1197.  
  1198.     li $2 1
  1199.     li $4 0
  1200.     sllv $3 $2 $4
  1201.     bne $3 1 fail
  1202.     li $4 1
  1203.     sllv $3 $2 $4
  1204.     bne $3 2 fail
  1205.     li $4 16
  1206.     sllv $3 $2 $4
  1207.     bne $3 0x10000 fail
  1208.     li $4 32
  1209.     sllv $3 $2 $4
  1210.     bne $3 1 fail
  1211.  
  1212.  
  1213.     .data
  1214. slt_:    .asciiz "Testing SLT\n"
  1215.     .text
  1216.     li $v0 4    # syscall 4 (print_str)
  1217.     la $a0 slt_
  1218.     syscall
  1219.  
  1220.     slt $3 $0 $0
  1221.     bne $3 0 fail
  1222.     li $2 1
  1223.     slt $3 $2 $0
  1224.     bne $3 0 fail
  1225.     slt $3 $0 $2
  1226.     bne $3 1 fail
  1227.     li $2 -1
  1228.     slt $3 $2 $0
  1229.     bne $3 1 fail
  1230.     slt $3 $0 $2
  1231.     bne $3 0 fail
  1232.     li $2 -1
  1233.     li $4 1
  1234.     slt $3 $2 $4
  1235.     bne $3 1 fail
  1236.  
  1237.  
  1238.     .data
  1239. slti_:    .asciiz "Testing SLTI\n"
  1240.     .text
  1241.     li $v0 4    # syscall 4 (print_str)
  1242.     la $a0 slti_
  1243.     syscall
  1244.  
  1245.     slti $3 $0 0
  1246.     bne $3 0 fail
  1247.     li $2 1
  1248.     slti $3 $2 0
  1249.     bne $3 0 fail
  1250.     slti $3 $0 1
  1251.     bne $3 1 fail
  1252.     li $2 -1
  1253.     slti $3 $2 0
  1254.     bne $3 1 fail
  1255.     slti $3 $0 -1
  1256.     bne $3 0 fail
  1257.     li $2 -1
  1258.     li $4 1
  1259.     slti $3 $2 1
  1260.     bne $3 1 fail
  1261.     slti $3 $4 -1
  1262.     bne $3 0 fail
  1263.  
  1264.  
  1265.     .data
  1266. sltiu_:    .asciiz "Testing SLTIU\n"
  1267.     .text
  1268.     li $v0 4    # syscall 4 (print_str)
  1269.     la $a0 sltiu_
  1270.     syscall
  1271.  
  1272.     sltiu $3 $0 0
  1273.     bne $3 0 fail
  1274.     li $2 1
  1275.     sltiu $3 $2 0
  1276.     bne $3 0 fail
  1277.     sltiu $3 $0 1
  1278.     bne $3 1 fail
  1279.     li $2 -1
  1280.     sltiu $3 $2 0
  1281.     bne $3 0 fail
  1282.     sltiu $3 $0 -1
  1283.     bne $3 1 fail
  1284.     li $2 -1
  1285.     li $4 1
  1286.     sltiu $3 $2 1
  1287.     bne $3 0 fail
  1288.     sltiu $3 $4 -1
  1289.     bne $3 1 fail
  1290.  
  1291.  
  1292.     .data
  1293. sltu_:    .asciiz "Testing SLTU\n"
  1294.     .text
  1295.     li $v0 4    # syscall 4 (print_str)
  1296.     la $a0 sltu_
  1297.     syscall
  1298.  
  1299.     sltu $3 $0 $0
  1300.     bne $3 0 fail
  1301.     li $2 1
  1302.     sltu $3 $2 $0
  1303.     bne $3 0 fail
  1304.     sltu $3 $0 $2
  1305.     bne $3 1 fail
  1306.     li $2 -1
  1307.     sltu $3 $2 $0
  1308.     bne $3 0 fail
  1309.     sltu $3 $0 $2
  1310.     bne $3 1 fail
  1311.     li $2 -1
  1312.     li $4 1
  1313.     sltu $3 $2 $4
  1314.     bne $3 0 fail
  1315.  
  1316.  
  1317.     .data
  1318. sra_:    .asciiz "Testing SRA\n"
  1319.     .text
  1320.     li $v0 4    # syscall 4 (print_str)
  1321.     la $a0 sra_
  1322.     syscall
  1323.  
  1324.     li $2 1
  1325.     sra $3 $2 0
  1326.     bne $3 1 fail
  1327.     sra $3 $2 1
  1328.     bne $3 0 fail
  1329.     li $2 0x1000
  1330.     sra $3 $2 4
  1331.     bne $3 0x100 fail
  1332.     li $2 0x80000000
  1333.     sra $3 $2 4
  1334.     bne $3 0xf8000000 fail
  1335.  
  1336.  
  1337.     .data
  1338. srav_:    .asciiz "Testing SRAV\n"
  1339.     .text
  1340.     li $v0 4    # syscall 4 (print_str)
  1341.     la $a0 srav_
  1342.     syscall
  1343.  
  1344.     li $2 1
  1345.     li $4 0
  1346.     srav $3 $2 $4
  1347.     bne $3 1 fail
  1348.     li $4 1
  1349.     srav $3 $2 $4
  1350.     bne $3 0 fail
  1351.     li $2 0x1000
  1352.     li $4 4
  1353.     srav $3 $2 $4
  1354.     bne $3 0x100 fail
  1355.     li $2 0x80000000
  1356.     li $4 4
  1357.     srav $3 $2 $4
  1358.     bne $3 0xf8000000 fail
  1359.  
  1360.  
  1361.     .data
  1362. srl_:    .asciiz "Testing SRL\n"
  1363.     .text
  1364.     li $v0 4    # syscall 4 (print_str)
  1365.     la $a0 srl_
  1366.     syscall
  1367.  
  1368.     li $2 1
  1369.     srl $3 $2 0
  1370.     bne $3 1 fail
  1371.     srl $3 $2 1
  1372.     bne $3 0 fail
  1373.     li $2 0x1000
  1374.     srl $3 $2 4
  1375.     bne $3 0x100 fail
  1376.     li $2 0x80000000
  1377.     srl $3 $2 4
  1378.     bne $3 0x08000000 fail
  1379.  
  1380.  
  1381.     .data
  1382. srlv_:    .asciiz "Testing SRLV\n"
  1383.     .text
  1384.     li $v0 4    # syscall 4 (print_str)
  1385.     la $a0 srlv_
  1386.     syscall
  1387.  
  1388.     li $2 1
  1389.     li $4 0
  1390.     srlv $3 $2 $4
  1391.     bne $3 1 fail
  1392.     li $4 1
  1393.     srlv $3 $2 $4
  1394.     bne $3 0 fail
  1395.     li $2 0x1000
  1396.     li $4 4
  1397.     srlv $3 $2 $4
  1398.     bne $3 0x100 fail
  1399.     li $2 0x80000000
  1400.     li $4 4
  1401.     srlv $3 $2 $4
  1402.     bne $3 0x08000000 fail
  1403.  
  1404.  
  1405.     .data
  1406. sub_:    .asciiz "Testing SUB\n"
  1407. sub1_:    .asciiz "Expect an overflow exceptions:\n  "
  1408.     .text
  1409.     li $v0 4    # syscall 4 (print_str)
  1410.     la $a0 sub_
  1411.     syscall
  1412.  
  1413.     li $2 1
  1414.     li $3 -1
  1415.  
  1416.     sub $4, $0, $0
  1417.     bnez $4 fail
  1418.     sub $4, $0, $2
  1419.     bne $4 -1 fail
  1420.     sub $4, $2, $0
  1421.     bne $4, 1 fail
  1422.     sub $4, $2, $3
  1423.     bne $4, 2 fail
  1424.     sub $4, $3, $2
  1425.     bne $4, -2 fail
  1426.  
  1427.     li $v0 4    # syscall 4 (print_str)
  1428.     la $a0 sub1_
  1429.     syscall
  1430.     li $2 0x80000000
  1431.     li $3 1
  1432.     sub $4, $3, $2
  1433.  
  1434.  
  1435.     .data
  1436. subu_:    .asciiz "Testing SUBU\n"
  1437.     .text
  1438.     li $v0 4    # syscall 4 (print_str)
  1439.     la $a0 subu_
  1440.     syscall
  1441.  
  1442.     li $2 1
  1443.     li $3 -1
  1444.  
  1445.     subu $4, $0, $0
  1446.     bnez $4 fail
  1447.     subu $4, $0, $2
  1448.     bne $4 -1 fail
  1449.     subu $4, $2, $0
  1450.     bne $4, 1 fail
  1451.     subu $4, $2, $3
  1452.     bne $4, 2 fail
  1453.     subu $4, $3, $2
  1454.     bne $4, -2 fail
  1455.  
  1456.     li $2 0x80000000
  1457.     li $3 1
  1458.     subu $4, $3, $2
  1459.  
  1460.  
  1461.     .data
  1462. sw_:    .asciiz "Testing SW\n"
  1463. sw2_:    .asciiz "Expect two address error exceptions:\n"
  1464.     .align 2
  1465. swd_:    .byte 0, 0, 0, 0
  1466.     .text
  1467.     li $v0 4    # syscall 4 (print_str)
  1468.     la $a0 sw_
  1469.     syscall
  1470.  
  1471.     li $3, 0x7f7f7f7f
  1472.     la $2 swd_
  1473.     sw $3 0($2)
  1474.     lw $4 0($2)
  1475.     bne $4 0x7f7f7f7f fail
  1476.  
  1477.     li $v0 4    # syscall 4 (print_str)
  1478.     la $a0 sw2_
  1479.     syscall
  1480.  
  1481.     sw $3 1000000($sp)
  1482.     sw $3 1000001($sp)
  1483.  
  1484.  
  1485.     .data
  1486. lswc_:    .asciiz "Testing load/store word coprocessor z\n"
  1487.     .align 2
  1488. lswcd_:    .byte 0, 0, 0, 0
  1489.     .text
  1490.     li $v0 4    # syscall 4 (print_str)
  1491.     la $a0 lswc_
  1492.     syscall
  1493.  
  1494.     li $3, 0x7f7f7f7f
  1495.     la $2 lswcd_
  1496.     mtc0 $3, $0
  1497.     swc0 $0 0($2)
  1498.     lw $4 0($2)
  1499.     bne $4 $3 fail
  1500.     lwc0 $1 0($2)
  1501.     mfc0 $5, $1
  1502.     bne $5 $3 fail
  1503.  
  1504.     li $3, 0x7f7f7f7f
  1505.     la $2 lswcd_
  1506.     mtc1 $3, $0
  1507.     swc1 $f0 0($2)
  1508.     lw $4 0($2)
  1509.     bne $4 $3 fail
  1510.     lwc1 $f1 0($2)
  1511.     mfc1 $5, $f1
  1512.     bne $5 $3 fail
  1513.  
  1514.     li $3, 0x7f7f7f7f
  1515.     la $2 lswcd_
  1516.     mtc2 $3, $0
  1517.     swc2 $0 0($2)
  1518.     lw $4 0($2)
  1519.     bne $4 $3 fail
  1520.     lwc2 $1 0($2)
  1521.     mfc2 $5, $1
  1522.     bne $5 $3 fail
  1523.  
  1524.     li $3, 0x7f7f7f7f
  1525.     la $2 lswcd_
  1526.     mtc3 $3, $0
  1527.     swc3 $0 0($2)
  1528.     lw $4 0($2)
  1529.     bne $4 $3 fail
  1530.     lwc3 $1 0($2)
  1531.     mfc3 $5, $1
  1532.     bne $5 $3 fail
  1533.  
  1534.  
  1535.     .data
  1536. swl_:    .asciiz "Testing SWL\n"
  1537.     .align 2
  1538. swld_:    .word 0 0
  1539.     .text
  1540.     li $v0 4    # syscall 4 (print_str)
  1541.     la $a0 swl_
  1542.     syscall
  1543.  
  1544.     la $2 swld_
  1545.  
  1546.     li $3 0x01020304
  1547.     swl $3 0($2)
  1548.     lw $4 0($2)
  1549.     bne $4 0x01020304 fail
  1550.  
  1551.     li $3 0x01020300
  1552.     swl $3 1($2)
  1553.     lw $4 0($2)
  1554.     bne $4 0x1010203 fail
  1555.  
  1556.     li $3 0x01020000
  1557.     swl $3 2($2)
  1558.     lw $4 0($2)
  1559.     bne $4 0x1010102 fail
  1560.  
  1561.     li $3 0x01000000
  1562.     swl $3 3($2)
  1563.     lw $4 0($2)
  1564.     bne $4 0x1010101 fail
  1565.  
  1566.  
  1567.     .data
  1568. swr_:    .asciiz "Testing SWR\n"
  1569.     .align 2
  1570. swrd_:    .word 0 0
  1571.     .text
  1572.     li $v0 4    # syscall 4 (print_str)
  1573.     la $a0 swr_
  1574.     syscall
  1575.  
  1576.     la $2 swrd_
  1577.  
  1578.     li $3 0x01020304
  1579.     swr $3 0($2)
  1580.     lw $4 0($2)
  1581.     bne $4 0x4000000 fail
  1582.  
  1583.     li $3 0x01020304
  1584.     swr $3 1($2)
  1585.     lw $4 0($2)
  1586.     bne $4 0x3040000 fail
  1587.  
  1588.     li $3 0x01020304
  1589.     swr $3 2($2)
  1590.     lw $4 0($2)
  1591.     bne $4 0x2030400 fail
  1592.  
  1593.     li $3 0x01020304
  1594.     swr $3 3($2)
  1595.     lw $4 0($2)
  1596.     bne $4 0x1020304 fail
  1597.  
  1598.  
  1599.     .data
  1600. syscall_:.asciiz "Testing SYSCALL\n"
  1601. syscall1_:.asciiz "The next line should contain: -1, -1.000000, -2.000000\n"
  1602. syscall2_:.asciiz ", "
  1603. fp_sm1:    .float -1.0
  1604. fp_dm2:    .double -2.0
  1605. fp_c1:    .float 17.18
  1606. fp_c2:    .float 1700.18
  1607. fp_c3:    .double 17.18e10
  1608. fp_c4:    .double 1700.18e10
  1609. syscall5_:.asciiz "\n"
  1610.     .text
  1611.     li $v0 4    # syscall 4 (print_str)
  1612.     la $a0 syscall_
  1613.     syscall
  1614.  
  1615.     li $v0 4    # syscall 4 (print_str)
  1616.     la $a0 syscall1_
  1617.     syscall
  1618.  
  1619.     li $v0 1
  1620.     li $a0 -1
  1621.     syscall
  1622.  
  1623.     li $v0 4    # syscall 4 (print_str)
  1624.     la $a0 syscall2_
  1625.     syscall
  1626.  
  1627.     lwc1 $f12 fp_sm1
  1628.     li $v0 2
  1629.     syscall
  1630.  
  1631.     li $v0 4    # syscall 4 (print_str)
  1632.     la $a0 syscall2_
  1633.     syscall
  1634.  
  1635.     lwc1 $f12 fp_dm2
  1636.     lwc1 $f13 fp_dm2+4
  1637.     li $v0 3
  1638.     syscall
  1639.  
  1640.     li $v0 4    # syscall 4 (print_str)
  1641.     la $a0 syscall5_
  1642.     syscall
  1643.  
  1644.  
  1645.     li $v0 5    # syscall 5 (read_int)
  1646.     syscall
  1647.     bne $v0 17 fail
  1648.  
  1649.     li $v0 5    # syscall 5 (read_int)
  1650.     syscall
  1651.     bne $v0 1717 fail
  1652.  
  1653.  
  1654.     li $v0 6    # syscall 6 (read_float)
  1655.     syscall
  1656.     lwc1 $f2 fp_c1
  1657.     c.eq.s $f0, $f2
  1658.     bc1f fail
  1659.  
  1660.     li $v0 6    # syscall 6 (read_float)
  1661.     syscall
  1662.     lwc1 $f2 fp_c2
  1663.     c.eq.s $f0, $f2
  1664.     bc1f fail
  1665.  
  1666.  
  1667.     li $v0 7    # syscall 7 (read_double)
  1668.     syscall
  1669.     lwc1 $f2 fp_c3
  1670.     lwc1 $f3 fp_c3+4
  1671.     c.eq.d $f0, $f2
  1672.     bc1f fail
  1673.  
  1674.     li $v0 7    # syscall 7 (read_double)
  1675.     syscall
  1676.     lwc1 $f2 fp_c4
  1677.     lwc1 $f3 fp_c4+4
  1678.     c.eq.d $f0, $f2
  1679.     bc1f fail
  1680.  
  1681.  
  1682.     .data
  1683. xor_:    .asciiz "Testing XOR\n"
  1684.     .text
  1685.     li $v0 4    # syscall 4 (print_str)
  1686.     la $a0 xor_
  1687.     syscall
  1688.  
  1689.     li $2 1
  1690.     li $3 -1
  1691.  
  1692.     xor $4 $0 $0
  1693.     bne $4 0 fail
  1694.     xor $4 $3 $3
  1695.     bne $4 0 fail
  1696.     xor $4 $2 $3
  1697.     bne $4 0xfffffffe fail
  1698.  
  1699.  
  1700.     .data
  1701. xori_:    .asciiz "Testing XORI\n"
  1702.     .text
  1703.     li $v0 4    # syscall 4 (print_str)
  1704.     la $a0 xori_
  1705.     syscall
  1706.  
  1707.     li $2 1
  1708.     li $3 -1
  1709.  
  1710.     xori $4 $0 0
  1711.     bne $4 0 fail
  1712.     xori $4 $3 -1
  1713.     bne $4 0 fail
  1714.     xori $4 $2 -1
  1715.     bne $4 0xfffffffe fail
  1716.  
  1717.  
  1718. #
  1719. # Testing Floating Point Ops
  1720. #
  1721.  
  1722.     .data
  1723. abs.s_:.asciiz "Testing ABS.S\n"
  1724. fp_s100:.float 100.0
  1725. fp_sm100:.float -100.0
  1726.     .text
  1727.     li $v0 4    # syscall 4 (print_str)
  1728.     la $a0 abs.s_
  1729.     syscall
  1730.  
  1731.     lw $4 fp_s100
  1732.     lwc1 $f0 fp_s100
  1733.     abs.s $f2 $f0
  1734.     mfc1 $5 $f2
  1735.     bne $4 $5 fail
  1736.  
  1737.     lwc1 $f0 fp_sm100
  1738.     abs.s $f2 $f0
  1739.     mfc1 $5 $f2
  1740.     bne $4 $5 fail
  1741.  
  1742.  
  1743.     .data
  1744. abs.d_:.asciiz "Testing ABS.D\n"
  1745. fp_d100:.double 100.0
  1746. fp_dm100:.double -100.0
  1747.     .text
  1748.     li $v0 4    # syscall 4 (print_str)
  1749.     la $a0 abs.d_
  1750.     syscall
  1751.  
  1752.     lw $4 fp_d100
  1753.     lw $5 fp_d100+4
  1754.     lwc1 $f0 fp_d100
  1755.     lwc1 $f1 fp_d100+4
  1756.     abs.d $f2 $f0
  1757.     mfc1 $6 $f2
  1758.     mfc1 $7 $f3
  1759.     bne $4 $6 fail
  1760.     bne $5 $7 fail
  1761.  
  1762.     lwc1 $f0 fp_dm100
  1763.     lwc1 $f1 fp_dm100+4
  1764.     abs.d $f2 $f0
  1765.     mfc1 $6 $f2
  1766.     mfc1 $7 $f3
  1767.     bne $4 $6 fail
  1768.     bne $5 $7 fail
  1769.  
  1770.  
  1771.     .data
  1772. add.s_:    .asciiz "Testing ADD.S\n"
  1773. fp_s0:    .float 0.0
  1774. fp_s1:    .float 1.0
  1775.     .text
  1776.     li $v0 4    # syscall 4 (print_str)
  1777.     la $a0 add.s_
  1778.     syscall
  1779.  
  1780.     lw $4 fp_s0
  1781.     lwc1 $f0 fp_s0
  1782.     add.s $f2 $f0 $f0
  1783.     mfc1 $6 $f2
  1784.     bne $4 $6 fail
  1785.  
  1786.     lw $4 fp_s1
  1787.     lwc1 $f0 fp_s0
  1788.     lwc1 $f2 fp_s1
  1789.     add.s $f4 $f0 $f2
  1790.     mfc1 $6 $f4
  1791.     bne $4 $6 fail
  1792.  
  1793.     lw $4 fp_s0
  1794.     lwc1 $f0 fp_s1
  1795.     lwc1 $f2 fp_sm1
  1796.     add.s $f4 $f0 $f2
  1797.     mfc1 $6 $f4
  1798.     bne $4 $6 fail
  1799.  
  1800.  
  1801.     .data
  1802. add.d_:    .asciiz "Testing ADD.D\n"
  1803. fp_d0:    .double 0.0
  1804. fp_d1:    .double 1.0
  1805. fp_dm1:    .double -1.0
  1806.     .text
  1807.     li $v0 4    # syscall 4 (print_str)
  1808.     la $a0 add.d_
  1809.     syscall
  1810.  
  1811.     lw $4 fp_d0
  1812.     lw $5 fp_d0+4
  1813.     lwc1 $f0 fp_d0
  1814.     lwc1 $f1 fp_d0+4
  1815.     add.d $f2 $f0 $f0
  1816.     mfc1 $6 $f2
  1817.     mfc1 $7 $f3
  1818.     bne $4 $6 fail
  1819.     bne $5 $7 fail
  1820.  
  1821.     lw $4 fp_d1
  1822.     lw $5 fp_d1+4
  1823.     lwc1 $f0 fp_d0
  1824.     lwc1 $f1 fp_d0+4
  1825.     lwc1 $f2 fp_d1
  1826.     lwc1 $f3 fp_d1+4
  1827.     add.d $f4 $f0 $f2
  1828.     mfc1 $6 $f4
  1829.     mfc1 $7 $f5
  1830.     bne $4 $6 fail
  1831.     bne $5 $7 fail
  1832.  
  1833.     lw $4 fp_d0
  1834.     lw $5 fp_d0+4
  1835.     lwc1 $f0 fp_d1
  1836.     lwc1 $f1 fp_d1+4
  1837.     lwc1 $f2 fp_dm1
  1838.     lwc1 $f3 fp_dm1+4
  1839.     add.d $f4 $f0 $f2
  1840.     mfc1 $6 $f4
  1841.     mfc1 $7 $f5
  1842.     bne $4 $6 fail
  1843.     bne $5 $7 fail
  1844.  
  1845.  
  1846. # BC1F and BC1T tested below.
  1847.  
  1848.  
  1849. # ToDo: Check order/unordered exception in floating point comparison.
  1850.  
  1851.     .data
  1852. c.eq.d_:    .asciiz "Testing C.EQ.D\n"
  1853.     .text
  1854.     li $v0 4    # syscall 4 (print_str)
  1855.     la $a0 c.eq.d_
  1856.     syscall
  1857.  
  1858.     lwc1 $f0 fp_d1
  1859.     lwc1 $f1 fp_d1+4
  1860.     lwc1 $f2 fp_d1
  1861.     lwc1 $f3 fp_d1+4
  1862.     lwc1 $f4 fp_d1p5
  1863.     lwc1 $f5 fp_d1p5+4
  1864.     c.eq.d $f0 $f2
  1865.     bc1f fail
  1866.     bc1t l200
  1867.     j fail
  1868. l200:    c.eq.d $f0 $f4
  1869.     bc1t fail
  1870.     bc1f l201
  1871.     j fail
  1872. l201:
  1873.  
  1874.  
  1875.     .data
  1876. c.eq.s_:    .asciiz "Testing C.EQ.S\n"
  1877.     .text
  1878.     li $v0 4    # syscall 4 (print_str)
  1879.     la $a0 c.eq.s_
  1880.     syscall
  1881.  
  1882.     lwc1 $f0 fp_s1
  1883.     lwc1 $f2 fp_s1
  1884.     lwc1 $f4 fp_s1p5
  1885.     c.eq.s $f0 $f2
  1886.     bc1f fail
  1887.     bc1t l210
  1888.     j fail
  1889. l210:    c.eq.s $f0 $f4
  1890.     bc1t fail
  1891.     bc1f l211
  1892.     j fail
  1893. l211:
  1894.  
  1895.  
  1896.     .data
  1897. c.f.d_:    .asciiz "Testing C.F.D\n"
  1898.     .text
  1899.     li $v0 4    # syscall 4 (print_str)
  1900.     la $a0 c.f.d_
  1901.     syscall
  1902.  
  1903.     lwc1 $f0 fp_d1
  1904.     lwc1 $f1 fp_d1+4
  1905.     lwc1 $f2 fp_d1
  1906.     lwc1 $f3 fp_d1+4
  1907.     lwc1 $f4 fp_d1p5
  1908.     lwc1 $f5 fp_d1p5+4
  1909.     c.f.d $f0 $f2
  1910.     bc1t fail
  1911.     bc1f l220
  1912.     j fail
  1913. l220:    c.f.d $f0 $f4
  1914.     bc1t fail
  1915.     bc1f l221
  1916.     j fail
  1917. l221:
  1918.  
  1919.  
  1920.     .data
  1921. c.f.s_:    .asciiz "Testing C.F.S\n"
  1922.     .text
  1923.     li $v0 4    # syscall 4 (print_str)
  1924.     la $a0 c.f.s_
  1925.     syscall
  1926.  
  1927.     lwc1 $f0 fp_s1
  1928.     lwc1 $f2 fp_s1
  1929.     lwc1 $f4 fp_s1p5
  1930.     c.f.s $f0 $f2
  1931.     bc1t fail
  1932.     bc1f l230
  1933.     j fail
  1934. l230:    c.f.s $f0 $f4
  1935.     bc1t fail
  1936.     bc1f l231
  1937.     j fail
  1938. l231:
  1939.  
  1940.  
  1941.     .data
  1942. c.le.d_:    .asciiz "Testing C.LE.D\n"
  1943.     .text
  1944.     li $v0 4    # syscall 4 (print_str)
  1945.     la $a0 c.le.d_
  1946.     syscall
  1947.  
  1948.     lwc1 $f0 fp_d1
  1949.     lwc1 $f1 fp_d1+4
  1950.     lwc1 $f2 fp_d1p5
  1951.     lwc1 $f3 fp_d1p5+4
  1952.     lwc1 $f4 fp_dm2
  1953.     lwc1 $f5 fp_dm2+4
  1954.     c.le.d $f0 $f2
  1955.     bc1f fail
  1956.     bc1t l240
  1957.     j fail
  1958. l240:    c.le.d $f2 $f0
  1959.     bc1t fail
  1960.     bc1f l241
  1961.     j fail
  1962. l241:    c.le.d $f0 $f0
  1963.     bc1f fail
  1964.     bc1t l242
  1965.     j fail
  1966. l242:    c.le.d $f4 $f0
  1967.     bc1f fail
  1968.     bc1t l243
  1969.     j fail
  1970. l243:
  1971.  
  1972.  
  1973.     .data
  1974. c.le.s_:    .asciiz "Testing C.LE.S\n"
  1975. fp_sm2:    .float -2.0
  1976.     .text
  1977.     li $v0 4    # syscall 4 (print_str)
  1978.     la $a0 c.le.s_
  1979.     syscall
  1980.  
  1981.     lwc1 $f0 fp_s1
  1982.     lwc1 $f2 fp_s1p5
  1983.     lwc1 $f4 fp_sm2
  1984.     c.le.s $f0 $f2
  1985.     bc1f fail
  1986.     bc1t l250
  1987.     j fail
  1988. l250:    c.le.s $f2 $f0
  1989.     bc1t fail
  1990.     bc1f l251
  1991.     j fail
  1992. l251:    c.le.s $f0 $f0
  1993.     bc1f fail
  1994.     bc1t l252
  1995.     j fail
  1996. l252:    c.le.s $f4 $f0
  1997.     bc1f fail
  1998.     bc1t l253
  1999.     j fail
  2000. l253:
  2001.  
  2002.  
  2003.     .data
  2004. c.lt.d_:    .asciiz "Testing C.LT.D\n"
  2005.     .text
  2006.     li $v0 4    # syscall 4 (print_str)
  2007.     la $a0 c.lt.d_
  2008.     syscall
  2009.  
  2010.     lwc1 $f0 fp_d1
  2011.     lwc1 $f1 fp_d1+4
  2012.     lwc1 $f2 fp_d1p5
  2013.     lwc1 $f3 fp_d1p5+4
  2014.     lwc1 $f4 fp_dm2
  2015.     lwc1 $f5 fp_dm2+4
  2016.     c.lt.d $f0 $f2
  2017.     bc1f fail
  2018.     bc1t l260
  2019.     j fail
  2020. l260:    c.lt.d $f2 $f0
  2021.     bc1t fail
  2022.     bc1f l261
  2023.     j fail
  2024. l261:    c.lt.d $f0 $f0
  2025.     bc1t fail
  2026.     bc1f l262
  2027.     j fail
  2028. l262:    c.lt.d $f4 $f0
  2029.     bc1f fail
  2030.     bc1t l263
  2031.     j fail
  2032. l263:
  2033.  
  2034.  
  2035.     .data
  2036. c.lt.s_:    .asciiz "Testing C.LT.S\n"
  2037.     .text
  2038.     li $v0 4    # syscall 4 (print_str)
  2039.     la $a0 c.lt.s_
  2040.     syscall
  2041.  
  2042.     lwc1 $f0 fp_s1
  2043.     lwc1 $f2 fp_s1p5
  2044.     lwc1 $f4 fp_sm2
  2045.     c.lt.s $f0 $f2
  2046.     bc1f fail
  2047.     bc1t l270
  2048.     j fail
  2049. l270:    c.lt.s $f2 $f0
  2050.     bc1t fail
  2051.     bc1f l271
  2052.     j fail
  2053. l271:    c.lt.s $f0 $f0
  2054.     bc1t fail
  2055.     bc1f l272
  2056.     j fail
  2057. l272:    c.lt.s $f4 $f0
  2058.     bc1f fail
  2059.     bc1t l273
  2060.     j fail
  2061. l273:
  2062.  
  2063.  
  2064.     .data
  2065. c.nge.d_:    .asciiz "Testing C.NGE.D\n"
  2066.     .text
  2067.     li $v0 4    # syscall 4 (print_str)
  2068.     la $a0 c.nge.d_
  2069.     syscall
  2070.  
  2071.     lwc1 $f0 fp_d1
  2072.     lwc1 $f1 fp_d1+4
  2073.     lwc1 $f2 fp_d1p5
  2074.     lwc1 $f3 fp_d1p5+4
  2075.     lwc1 $f4 fp_dm2
  2076.     lwc1 $f5 fp_dm2+4
  2077.     c.nge.d $f0 $f2
  2078.     bc1f fail
  2079.     bc1t l280
  2080.     j fail
  2081. l280:    c.nge.d $f2 $f0
  2082.     bc1t fail
  2083.     bc1f l281
  2084.     j fail
  2085. l281:    c.nge.d $f0 $f0
  2086.     bc1t fail
  2087.     bc1f l282
  2088.     j fail
  2089. l282:    c.nge.d $f4 $f0
  2090.     bc1f fail
  2091.     bc1t l283
  2092.     j fail
  2093. l283:
  2094.  
  2095.  
  2096.     .data
  2097. c.nge.s_:    .asciiz "Testing C.NGE.S\n"
  2098.     .text
  2099.     li $v0 4    # syscall 4 (print_str)
  2100.     la $a0 c.nge.s_
  2101.     syscall
  2102.  
  2103.     lwc1 $f0 fp_s1
  2104.     lwc1 $f2 fp_s1p5
  2105.     lwc1 $f4 fp_sm2
  2106.     c.nge.s $f0 $f2
  2107.     bc1f fail
  2108.     bc1t l290
  2109.     j fail
  2110. l290:    c.nge.s $f2 $f0
  2111.     bc1t fail
  2112.     bc1f l291
  2113.     j fail
  2114. l291:    c.nge.s $f0 $f0
  2115.     bc1t fail
  2116.     bc1f l292
  2117.     j fail
  2118. l292:    c.nge.s $f4 $f0
  2119.     bc1f fail
  2120.     bc1t l293
  2121.     j fail
  2122. l293:
  2123.  
  2124.  
  2125.     .data
  2126. c.ngle.d_:    .asciiz "Testing C.NGLE.D\n"
  2127.     .text
  2128.     li $v0 4    # syscall 4 (print_str)
  2129.     la $a0 c.ngle.d_
  2130.     syscall
  2131.  
  2132.     lwc1 $f0 fp_d1
  2133.     lwc1 $f1 fp_d1+4
  2134.     lwc1 $f2 fp_d1
  2135.     lwc1 $f3 fp_d1+4
  2136.     lwc1 $f4 fp_d1p5
  2137.     lwc1 $f5 fp_d1p5+4
  2138.     c.ngle.d $f0 $f2
  2139.     bc1t fail
  2140. l300:    c.ngle.d $f0 $f4
  2141.     bc1t fail
  2142. l301:
  2143.  
  2144.  
  2145.     .data
  2146. c.ngle.s_:    .asciiz "Testing C.NGLE.S\n"
  2147.     .text
  2148.     li $v0 4    # syscall 4 (print_str)
  2149.     la $a0 c.ngle.s_
  2150.     syscall
  2151.  
  2152.     lwc1 $f0 fp_s1
  2153.     lwc1 $f2 fp_s1
  2154.     lwc1 $f4 fp_s1p5
  2155.     c.ngle.s $f0 $f2
  2156.     bc1t fail
  2157. l310:    c.ngle.s $f0 $f4
  2158.     bc1t fail
  2159. l311:
  2160.  
  2161.  
  2162.     .data
  2163. c.ngl.d_:    .asciiz "Testing C.NGL.D\n"
  2164.     .text
  2165.     li $v0 4    # syscall 4 (print_str)
  2166.     la $a0 c.ngl.d_
  2167.     syscall
  2168.  
  2169.     lwc1 $f0 fp_d1
  2170.     lwc1 $f1 fp_d1+4
  2171.     lwc1 $f2 fp_d1
  2172.     lwc1 $f3 fp_d1+4
  2173.     lwc1 $f4 fp_d1p5
  2174.     lwc1 $f5 fp_d1p5+4
  2175.     c.ngl.d $f0 $f2
  2176.     bc1f fail
  2177.     bc1t l320
  2178.     j fail
  2179. l320:    c.ngl.d $f0 $f4
  2180.     bc1t fail
  2181.     bc1f l321
  2182.     j fail
  2183. l321:
  2184.  
  2185.  
  2186.     .data
  2187. c.ngl.s_:    .asciiz "Testing C.NGL.S\n"
  2188.     .text
  2189.     li $v0 4    # syscall 4 (print_str)
  2190.     la $a0 c.ngl.s_
  2191.     syscall
  2192.  
  2193.     lwc1 $f0 fp_s1
  2194.     lwc1 $f2 fp_s1
  2195.     lwc1 $f4 fp_s1p5
  2196.     c.ngl.s $f0 $f2
  2197.     bc1f fail
  2198.     bc1t l330
  2199.     j fail
  2200. l330:    c.ngl.s $f0 $f4
  2201.     bc1t fail
  2202.     bc1f l331
  2203.     j fail
  2204. l331:
  2205.  
  2206.  
  2207.     .data
  2208. c.ngt.d_:    .asciiz "Testing C.NGT.D\n"
  2209.     .text
  2210.     li $v0 4    # syscall 4 (print_str)
  2211.     la $a0 c.ngt.d_
  2212.     syscall
  2213.  
  2214.     lwc1 $f0 fp_d1
  2215.     lwc1 $f1 fp_d1+4
  2216.     lwc1 $f2 fp_d1p5
  2217.     lwc1 $f3 fp_d1p5+4
  2218.     lwc1 $f4 fp_dm2
  2219.     lwc1 $f5 fp_dm2+4
  2220.     c.ngt.d $f0 $f2
  2221.     bc1f fail
  2222.     bc1t l340
  2223.     j fail
  2224. l340:    c.ngt.d $f2 $f0
  2225.     bc1t fail
  2226.     bc1f l341
  2227.     j fail
  2228. l341:    c.ngt.d $f0 $f0
  2229.     bc1f fail
  2230.     bc1t l342
  2231.     j fail
  2232. l342:    c.ngt.d $f4 $f0
  2233.     bc1f fail
  2234.     bc1t l343
  2235.     j fail
  2236. l343:
  2237.  
  2238.  
  2239.     .data
  2240. c.ngt.s_:    .asciiz "Testing C.NGT.S\n"
  2241.     .text
  2242.     li $v0 4    # syscall 4 (print_str)
  2243.     la $a0 c.ngt.s_
  2244.     syscall
  2245.  
  2246.     lwc1 $f0 fp_s1
  2247.     lwc1 $f2 fp_s1p5
  2248.     lwc1 $f4 fp_sm2
  2249.     c.ngt.s $f0 $f2
  2250.     bc1f fail
  2251.     bc1t l350
  2252.     j fail
  2253. l350:    c.ngt.s $f2 $f0
  2254.     bc1t fail
  2255.     bc1f l351
  2256.     j fail
  2257. l351:    c.ngt.s $f0 $f0
  2258.     bc1f fail
  2259.     bc1t l352
  2260.     j fail
  2261. l352:    c.ngt.s $f4 $f0
  2262.     bc1f fail
  2263.     bc1t l353
  2264.     j fail
  2265. l353:
  2266.  
  2267.  
  2268.     .data
  2269. c.ole.d_:    .asciiz "Testing C.OLE.D\n"
  2270.     .text
  2271.     li $v0 4    # syscall 4 (print_str)
  2272.     la $a0 c.ole.d_
  2273.     syscall
  2274.  
  2275.     lwc1 $f0 fp_d1
  2276.     lwc1 $f1 fp_d1+4
  2277.     lwc1 $f2 fp_d1p5
  2278.     lwc1 $f3 fp_d1p5+4
  2279.     lwc1 $f4 fp_dm2
  2280.     lwc1 $f5 fp_dm2+4
  2281.     c.ole.d $f0 $f2
  2282.     bc1f fail
  2283.     bc1t l360
  2284.     j fail
  2285. l360:    c.ole.d $f2 $f0
  2286.     bc1t fail
  2287.     bc1f l361
  2288.     j fail
  2289. l361:    c.ole.d $f0 $f0
  2290.     bc1f fail
  2291.     bc1t l362
  2292.     j fail
  2293. l362:    c.ole.d $f4 $f0
  2294.     bc1f fail
  2295.     bc1t l363
  2296.     j fail
  2297. l363:
  2298.  
  2299.  
  2300.     .data
  2301. c.ole.s_:    .asciiz "Testing C.OLE.S\n"
  2302.     .text
  2303.     li $v0 4    # syscall 4 (print_str)
  2304.     la $a0 c.ole.s_
  2305.     syscall
  2306.  
  2307.     lwc1 $f0 fp_s1
  2308.     lwc1 $f2 fp_s1p5
  2309.     lwc1 $f4 fp_sm2
  2310.     c.ole.s $f0 $f2
  2311.     bc1f fail
  2312.     bc1t l370
  2313.     j fail
  2314. l370:    c.ole.s $f2 $f0
  2315.     bc1t fail
  2316.     bc1f l371
  2317.     j fail
  2318. l371:    c.ole.s $f0 $f0
  2319.     bc1f fail
  2320.     bc1t l372
  2321.     j fail
  2322. l372:    c.ole.s $f4 $f0
  2323.     bc1f fail
  2324.     bc1t l373
  2325.     j fail
  2326. l373:
  2327.  
  2328.  
  2329.     .data
  2330. c.seq.d_:    .asciiz "Testing C.SEQ.D\n"
  2331.     .text
  2332.     li $v0 4    # syscall 4 (print_str)
  2333.     la $a0 c.seq.d_
  2334.     syscall
  2335.  
  2336.     lwc1 $f0 fp_d1
  2337.     lwc1 $f1 fp_d1+4
  2338.     lwc1 $f2 fp_d1
  2339.     lwc1 $f3 fp_d1+4
  2340.     lwc1 $f4 fp_d1p5
  2341.     lwc1 $f5 fp_d1p5+4
  2342.     c.seq.d $f0 $f2
  2343.     bc1f fail
  2344.     bc1t l380
  2345.     j fail
  2346. l380:    c.seq.d $f0 $f4
  2347.     bc1t fail
  2348.     bc1f l381
  2349.     j fail
  2350. l381:
  2351.  
  2352.  
  2353.     .data
  2354. c.seq.s_:    .asciiz "Testing C.SEQ.S\n"
  2355.     .text
  2356.     li $v0 4    # syscall 4 (print_str)
  2357.     la $a0 c.seq.s_
  2358.     syscall
  2359.  
  2360.     lwc1 $f0 fp_s1
  2361.     lwc1 $f2 fp_s1
  2362.     lwc1 $f4 fp_s1p5
  2363.     c.seq.s $f0 $f2
  2364.     bc1f fail
  2365.     bc1t l390
  2366.     j fail
  2367. l390:    c.seq.s $f0 $f4
  2368.     bc1t fail
  2369.     bc1f l391
  2370.     j fail
  2371. l391:
  2372.  
  2373.  
  2374.     .data
  2375. c.sf.d_:    .asciiz "Testing C.SF.D\n"
  2376.     .text
  2377.     li $v0 4    # syscall 4 (print_str)
  2378.     la $a0 c.sf.d_
  2379.     syscall
  2380.  
  2381.     lwc1 $f0 fp_d1
  2382.     lwc1 $f1 fp_d1+4
  2383.     lwc1 $f2 fp_d1
  2384.     lwc1 $f3 fp_d1+4
  2385.     lwc1 $f4 fp_d1p5
  2386.     lwc1 $f5 fp_d1p5+4
  2387.     c.sf.d $f0 $f2
  2388.     bc1t fail
  2389. l400:    c.sf.d $f0 $f4
  2390.     bc1t fail
  2391. l401:
  2392.  
  2393.  
  2394.     .data
  2395. c.sf.s_:    .asciiz "Testing C.SF.S\n"
  2396.     .text
  2397.     li $v0 4    # syscall 4 (print_str)
  2398.     la $a0 c.sf.s_
  2399.     syscall
  2400.  
  2401.     lwc1 $f0 fp_s1
  2402.     lwc1 $f2 fp_s1
  2403.     lwc1 $f4 fp_s1p5
  2404.     c.sf.s $f0 $f2
  2405.     bc1t fail
  2406. l410:    c.sf.s $f0 $f4
  2407.     bc1t fail
  2408. l411:
  2409.  
  2410.  
  2411.     .data
  2412. c.ueq.d_:    .asciiz "Testing C.UEQ.D\n"
  2413.     .text
  2414.     li $v0 4    # syscall 4 (print_str)
  2415.     la $a0 c.ueq.d_
  2416.     syscall
  2417.  
  2418.     lwc1 $f0 fp_d1
  2419.     lwc1 $f1 fp_d1+4
  2420.     lwc1 $f2 fp_d1
  2421.     lwc1 $f3 fp_d1+4
  2422.     lwc1 $f4 fp_d1p5
  2423.     lwc1 $f5 fp_d1p5+4
  2424.     c.ueq.d $f0 $f2
  2425.     bc1f fail
  2426.     bc1t l420
  2427.     j fail
  2428. l420:    c.ueq.d $f0 $f4
  2429.     bc1t fail
  2430.     bc1f l421
  2431.     j fail
  2432. l421:
  2433.  
  2434.  
  2435.     .data
  2436. c.ueq.s_:    .asciiz "Testing C.UEQ.S\n"
  2437.     .text
  2438.     li $v0 4    # syscall 4 (print_str)
  2439.     la $a0 c.ueq.s_
  2440.     syscall
  2441.  
  2442.     lwc1 $f0 fp_s1
  2443.     lwc1 $f2 fp_s1
  2444.     lwc1 $f4 fp_s1p5
  2445.     c.ueq.s $f0 $f2
  2446.     bc1f fail
  2447.     bc1t l430
  2448.     j fail
  2449. l430:    c.ueq.s $f0 $f4
  2450.     bc1t fail
  2451.     bc1f l431
  2452.     j fail
  2453. l431:
  2454.  
  2455.  
  2456.     .data
  2457. c.ule.d_:    .asciiz "Testing C.ULE.D\n"
  2458.     .text
  2459.     li $v0 4    # syscall 4 (print_str)
  2460.     la $a0 c.ule.d_
  2461.     syscall
  2462.  
  2463.     lwc1 $f0 fp_d1
  2464.     lwc1 $f1 fp_d1+4
  2465.     lwc1 $f2 fp_d1p5
  2466.     lwc1 $f3 fp_d1p5+4
  2467.     lwc1 $f4 fp_dm2
  2468.     lwc1 $f5 fp_dm2+4
  2469.     c.ule.d $f0 $f2
  2470.     bc1f fail
  2471.     bc1t l440
  2472.     j fail
  2473. l440:    c.ule.d $f2 $f0
  2474.     bc1t fail
  2475.     bc1f l441
  2476.     j fail
  2477. l441:    c.ule.d $f0 $f0
  2478.     bc1f fail
  2479.     bc1t l442
  2480.     j fail
  2481. l442:    c.ule.d $f4 $f0
  2482.     bc1f fail
  2483.     bc1t l443
  2484.     j fail
  2485. l443:
  2486.  
  2487.  
  2488.     .data
  2489. c.ule.s_:    .asciiz "Testing C.ULE.S\n"
  2490.     .text
  2491.     li $v0 4    # syscall 4 (print_str)
  2492.     la $a0 c.ule.s_
  2493.     syscall
  2494.  
  2495.     lwc1 $f0 fp_s1
  2496.     lwc1 $f2 fp_s1p5
  2497.     lwc1 $f4 fp_sm2
  2498.     c.ule.s $f0 $f2
  2499.     bc1f fail
  2500.     bc1t l450
  2501.     j fail
  2502. l450:    c.ule.s $f2 $f0
  2503.     bc1t fail
  2504.     bc1f l451
  2505.     j fail
  2506. l451:    c.ule.s $f0 $f0
  2507.     bc1f fail
  2508.     bc1t l452
  2509.     j fail
  2510. l452:    c.ule.s $f4 $f0
  2511.     bc1f fail
  2512.     bc1t l453
  2513.     j fail
  2514. l453:
  2515.  
  2516.  
  2517.     .data
  2518. c.un.d_:    .asciiz "Testing C.UN.D\n"
  2519.     .text
  2520.     li $v0 4    # syscall 4 (print_str)
  2521.     la $a0 c.un.d_
  2522.     syscall
  2523.  
  2524.     lwc1 $f0 fp_d1
  2525.     lwc1 $f1 fp_d1+4
  2526.     lwc1 $f2 fp_d1
  2527.     lwc1 $f3 fp_d1+4
  2528.     lwc1 $f4 fp_d1p5
  2529.     lwc1 $f5 fp_d1p5+4
  2530.     c.un.d $f0 $f2
  2531.     bc1t fail
  2532.     bc1f l460
  2533.     j fail
  2534. l460:    c.un.d $f0 $f4
  2535.     bc1t fail
  2536.     bc1f l461
  2537.     j fail
  2538. l461:
  2539.  
  2540.  
  2541.     .data
  2542. c.un.s_:    .asciiz "Testing C.UN.S\n"
  2543.     .text
  2544.     li $v0 4    # syscall 4 (print_str)
  2545.     la $a0 c.un.s_
  2546.     syscall
  2547.  
  2548.     lwc1 $f0 fp_s1
  2549.     lwc1 $f2 fp_s1
  2550.     lwc1 $f4 fp_s1p5
  2551.     c.un.s $f0 $f2
  2552.     bc1t fail
  2553.     bc1f l470
  2554.     j fail
  2555. l470:    c.un.s $f0 $f4
  2556.     bc1t fail
  2557.     bc1f l471
  2558.     j fail
  2559. l471:
  2560.  
  2561.  
  2562. # CFC1 and CTC1 tested previously
  2563.  
  2564.  
  2565.     .data
  2566. cvt.d.s_:    .asciiz "Testing CVT.D.S\n"
  2567.     .text
  2568.     li $v0 4    # syscall 4 (print_str)
  2569.     la $a0 cvt.d.s_
  2570.     syscall
  2571.  
  2572.     lw $4 fp_d0
  2573.     lw $5 fp_d0+4
  2574.     lwc1 $f0 fp_s0
  2575.     cvt.d.s $f2 $f0
  2576.     mfc1 $6 $f2
  2577.     mfc1 $7 $f3
  2578.     bne $4 $6 fail
  2579.     bne $5 $7 fail
  2580.  
  2581.     lw $4 fp_d1
  2582.     lw $5 fp_d1+4
  2583.     lwc1 $f0 fp_s1
  2584.     cvt.d.s $f2 $f0
  2585.     mfc1 $6 $f2
  2586.     mfc1 $7 $f3
  2587.     bne $4 $6 fail
  2588.     bne $5 $7 fail
  2589.  
  2590.     lw $4 fp_dm1
  2591.     lw $5 fp_dm1+4
  2592.     lwc1 $f0 fp_sm1
  2593.     cvt.d.s $f2 $f0
  2594.     mfc1 $6 $f2
  2595.     mfc1 $7 $f3
  2596.     bne $4 $6 fail
  2597.     bne $5 $7 fail
  2598.  
  2599.  
  2600.     .data
  2601. cvt.d.w_:    .asciiz "Testing CVT.D.W\n"
  2602.     .text
  2603.     li $v0 4    # syscall 4 (print_str)
  2604.     la $a0 cvt.d.w_
  2605.     syscall
  2606.  
  2607.     lw $4 fp_d0
  2608.     lw $5 fp_d0+4
  2609.     mtc1 $0 $0
  2610.     cvt.d.w $f2 $f0
  2611.     mfc1 $6 $f2
  2612.     mfc1 $7 $f3
  2613.     bne $4 $6 fail
  2614.     bne $5 $7 fail
  2615.  
  2616.     lw $4 fp_d1
  2617.     lw $5 fp_d1+4
  2618.     li $t1 1
  2619.     mtc1 $t1 $0
  2620.     cvt.d.w $f2 $f0
  2621.     mfc1 $6 $f2
  2622.     mfc1 $7 $f3
  2623.     bne $4 $6 fail
  2624.     bne $5 $7 fail
  2625.  
  2626.     lw $4 fp_dm1
  2627.     lw $5 fp_dm1+4
  2628.     li $t1 -1
  2629.     mtc1 $t1 $0
  2630.     cvt.d.w $f2 $f0
  2631.     mfc1 $6 $f2
  2632.     mfc1 $7 $f3
  2633.     bne $4 $6 fail
  2634.     bne $5 $7 fail
  2635.  
  2636.  
  2637.     .data
  2638. cvt.s.d_:    .asciiz "Testing CVT.S.D\n"
  2639.     .text
  2640.     li $v0 4    # syscall 4 (print_str)
  2641.     la $a0 cvt.s.d_
  2642.     syscall
  2643.  
  2644.     lw $4 fp_s0
  2645.     lwc1 $f0 fp_d0
  2646.     lwc1 $f1 fp_d0+4
  2647.     cvt.s.d $f2 $f0
  2648.     mfc1 $6 $f2
  2649.     bne $4 $6 fail
  2650.  
  2651.     lw $4 fp_s1
  2652.     lwc1 $f0 fp_d1
  2653.     lwc1 $f1 fp_d1+4
  2654.     cvt.s.d $f2 $f0
  2655.     mfc1 $6 $f2
  2656.     bne $4 $6 fail
  2657.  
  2658.     lw $4 fp_sm1
  2659.     lwc1 $f0 fp_dm1
  2660.     lwc1 $f1 fp_dm1+4
  2661.     cvt.s.d $f2 $f0
  2662.     mfc1 $6 $f2
  2663.     bne $4 $6 fail
  2664.  
  2665.  
  2666.     .data
  2667. cvt.s.w_:    .asciiz "Testing CVT.S.W\n"
  2668.     .text
  2669.     li $v0 4    # syscall 4 (print_str)
  2670.     la $a0 cvt.s.w_
  2671.     syscall
  2672.  
  2673.     lw $4 fp_s0
  2674.     mtc1 $0 $0
  2675.     cvt.s.w $f2 $f0
  2676.     mfc1 $6 $f2
  2677.     bne $4 $6 fail
  2678.  
  2679.     lw $4 fp_s1
  2680.     li $t1 1
  2681.     mtc1 $t1 $0
  2682.     cvt.s.w $f2 $f0
  2683.     mfc1 $6 $f2
  2684.     bne $4 $6 fail
  2685.  
  2686.     lw $4 fp_sm1
  2687.     li $t1 -1
  2688.     mtc1 $t1 $0
  2689.     cvt.s.w $f2 $f0
  2690.     mfc1 $6 $f2
  2691.     bne $4 $6 fail
  2692.  
  2693.  
  2694.     .data
  2695. cvt.w.d_:    .asciiz "Testing CVT.W.D\n"
  2696.     .text
  2697.     li $v0 4    # syscall 4 (print_str)
  2698.     la $a0 cvt.w.d_
  2699.     syscall
  2700.  
  2701.     lwc1 $f0 fp_d0
  2702.     lwc1 $f1 fp_d0+4
  2703.     cvt.w.d $f2 $f0
  2704.     mfc1 $6 $f2
  2705.     bne $0 $6 fail
  2706.  
  2707.     lwc1 $f0 fp_d1
  2708.     lwc1 $f1 fp_d1+4
  2709.     cvt.w.d $f2 $f0
  2710.     mfc1 $6 $f2
  2711.     li $4 1
  2712.     bne $4 $6 fail
  2713.  
  2714.     lwc1 $f0 fp_dm1
  2715.     lwc1 $f1 fp_dm1+4
  2716.     cvt.w.d $f2 $f0
  2717.     mfc1 $6 $f2
  2718.     li $4 -1
  2719.     bne $4 $6 fail
  2720.  
  2721.  
  2722.     .data
  2723. cvt.w.s_:    .asciiz "Testing CVT.W.S\n"
  2724.     .text
  2725.     li $v0 4    # syscall 4 (print_str)
  2726.     la $a0 cvt.w.s_
  2727.     syscall
  2728.  
  2729.     lwc1 $f0 fp_s0
  2730.     cvt.w.s $f2 $f0
  2731.     mfc1 $6 $f2
  2732.     bne $0 $6 fail
  2733.  
  2734.     lwc1 $f0 fp_s1
  2735.     cvt.w.s $f2 $f0
  2736.     mfc1 $6 $f2
  2737.     li $4 1
  2738.     bne $4 $6 fail
  2739.  
  2740.     lwc1 $f0 fp_sm1
  2741.     cvt.w.s $f2 $f0
  2742.     mfc1 $6 $f2
  2743.     li $4 -1
  2744.     bne $4 $6 fail
  2745.  
  2746.  
  2747.     .data
  2748. div.s_:    .asciiz "Testing DIV.S\n"
  2749. fp_s2:    .float 2.0
  2750. fp_s3:    .float 3.0
  2751. fp_s1p5:.float 1.5
  2752.     .text
  2753.     li $v0 4    # syscall 4 (print_str)
  2754.     la $a0 div.s_
  2755.     syscall
  2756.  
  2757.     lw $4 fp_s1
  2758.     lwc1 $f0 fp_s1
  2759.     div.s $f2 $f0 $f0
  2760.     mfc1 $6 $f2
  2761.     bne $4 $6 fail
  2762.  
  2763.     lw $4 fp_s1p5
  2764.     lwc1 $f0 fp_s3
  2765.     lwc1 $f2 fp_s2
  2766.     div.s $f4 $f0 $f2
  2767.     mfc1 $6 $f4
  2768.     bne $4 $6 fail
  2769.  
  2770.  
  2771.     .data
  2772. div.d_:    .asciiz "Testing DIV.D\n"
  2773. fp_d2:    .double 2.0
  2774. fp_d3:    .double 3.0
  2775. fp_d1p5:.double 1.5
  2776.     .text
  2777.     li $v0 4    # syscall 4 (print_str)
  2778.     la $a0 div.d_
  2779.     syscall
  2780.  
  2781.     lw $4 fp_d1
  2782.     lw $5 fp_d1+4
  2783.     lwc1 $f0 fp_d1
  2784.     lwc1 $f1 fp_d1+4
  2785.     div.d $f2 $f0 $f0
  2786.     mfc1 $6 $f2
  2787.     mfc1 $7 $f3
  2788.     bne $4 $6 fail
  2789.     bne $5 $7 fail
  2790.  
  2791.     lw $4 fp_d1p5
  2792.     lw $5 fp_d1p5+4
  2793.     lwc1 $f0 fp_d3
  2794.     lwc1 $f1 fp_d3+4
  2795.     lwc1 $f2 fp_d2
  2796.     lwc1 $f3 fp_d2+4
  2797.     div.d $f4 $f0 $f2
  2798.     mfc1 $6 $f4
  2799.     mfc1 $7 $f5
  2800.     bne $4 $6 fail
  2801.     bne $5 $7 fail
  2802.  
  2803.  
  2804. # LWC1, MFC1 tested pfreviously
  2805.  
  2806.     .data
  2807. mov.s_:    .asciiz "Testing MOV.S\n"
  2808.     .text
  2809.     li $v0 4    # syscall 4 (print_str)
  2810.     la $a0 mov.s_
  2811.     syscall
  2812.  
  2813.     lw $4 fp_s1
  2814.     lwc1 $f2 fp_s1
  2815.     mov.s $f4 $f2
  2816.     mov.s $f6 $f4
  2817.     mfc1 $6 $f6
  2818.     bne $4 $6 fail
  2819.  
  2820.  
  2821.     .data
  2822. mov.d_:    .asciiz "Testing MOV.D\n"
  2823.     .text
  2824.     li $v0 4    # syscall 4 (print_str)
  2825.     la $a0 mov.d_
  2826.     syscall
  2827.  
  2828.     lw $4 fp_d1
  2829.     lw $5 fp_d1+4
  2830.     lwc1 $f2 fp_d1
  2831.     lwc1 $f3 fp_d1+4
  2832.     mov.d $f4 $f2
  2833.     mov.d $f6 $f4
  2834.     mfc1 $6 $f6
  2835.     mfc1 $7 $f7
  2836.     bne $4 $6 fail
  2837.     bne $5 $7 fail
  2838.  
  2839.  
  2840. # MTC1 tested previously
  2841.  
  2842.     .data
  2843. mul.s_:    .asciiz "Testing MUL.S\n"
  2844.     .text
  2845.     li $v0 4    # syscall 4 (print_str)
  2846.     la $a0 mul.s_
  2847.     syscall
  2848.  
  2849.     lw $4 fp_s1
  2850.     lwc1 $f0 fp_s1
  2851.     mul.s $f2 $f0 $f0
  2852.     mfc1 $6 $f2
  2853.     bne $4 $6 fail
  2854.  
  2855.     lw $4 fp_s3
  2856.     lwc1 $f0 fp_s1p5
  2857.     lwc1 $f2 fp_s2
  2858.     mul.s $f4 $f0 $f2
  2859.     mfc1 $6 $f4
  2860.     bne $4 $6 fail
  2861.  
  2862.  
  2863.     .data
  2864. mul.d_:    .asciiz "Testing MUL.D\n"
  2865.     .text
  2866.     li $v0 4    # syscall 4 (print_str)
  2867.     la $a0 mul.d_
  2868.     syscall
  2869.  
  2870.     lw $4 fp_d1
  2871.     lw $5 fp_d1+4
  2872.     lwc1 $f0 fp_d1
  2873.     lwc1 $f1 fp_d1+4
  2874.     mul.d $f2 $f0 $f0
  2875.     mfc1 $6 $f2
  2876.     mfc1 $7 $f3
  2877.     bne $4 $6 fail
  2878.     bne $5 $7 fail
  2879.  
  2880.     lw $4 fp_d3
  2881.     lw $5 fp_d3+4
  2882.     lwc1 $f0 fp_d1p5
  2883.     lwc1 $f1 fp_d1p5+4
  2884.     lwc1 $f2 fp_d2
  2885.     lwc1 $f3 fp_d2+4
  2886.     mul.d $f4 $f0 $f2
  2887.     mfc1 $6 $f4
  2888.     mfc1 $7 $f5
  2889.     bne $4 $6 fail
  2890.     bne $5 $7 fail
  2891.  
  2892.  
  2893.     .data
  2894. neg.s_:    .asciiz "Testing NEG.S\n"
  2895. fp_sm3:    .float -3.0
  2896.     .text
  2897.     li $v0 4    # syscall 4 (print_str)
  2898.     la $a0 neg.s_
  2899.     syscall
  2900.  
  2901.     lw $4 fp_sm1
  2902.     lwc1 $f0 fp_s1
  2903.     neg.s $f2 $f0
  2904.     mfc1 $6 $f2
  2905.     bne $4 $6 fail
  2906.  
  2907.     lw $4 fp_s3
  2908.     lwc1 $f0 fp_sm3
  2909.     neg.s $f2 $f0
  2910.     mfc1 $6 $f2
  2911.     bne $4 $6 fail
  2912.  
  2913.  
  2914.     .data
  2915. neg.d_:    .asciiz "Testing NEG.D\n"
  2916. fp_dm3:    .double -3.0
  2917.     .text
  2918.     li $v0 4    # syscall 4 (print_str)
  2919.     la $a0 neg.d_
  2920.     syscall
  2921.  
  2922.     lw $4 fp_dm1
  2923.     lw $5 fp_dm1+4
  2924.     lwc1 $f0 fp_d1
  2925.     lwc1 $f1 fp_d1+4
  2926.     neg.d $f2 $f0
  2927.     mfc1 $6 $f2
  2928.     mfc1 $7 $f3
  2929.     bne $4 $6 fail
  2930.     bne $5 $7 fail
  2931.  
  2932.     lw $4 fp_d3
  2933.     lw $5 fp_d3+4
  2934.     lwc1 $f0 fp_dm3
  2935.     lwc1 $f1 fp_dm3+4
  2936.     neg.d $f4 $f0
  2937.     mfc1 $6 $f4
  2938.     mfc1 $7 $f5
  2939.     bne $4 $6 fail
  2940.     bne $5 $7 fail
  2941.  
  2942.  
  2943.     .data
  2944. sub.s_:    .asciiz "Testing SUB.S\n"
  2945.     .text
  2946.     li $v0 4    # syscall 4 (print_str)
  2947.     la $a0 sub.s_
  2948.     syscall
  2949.  
  2950.     lw $4 fp_s0
  2951.     lwc1 $f0 fp_s0
  2952.     sub.s $f2 $f0 $f0
  2953.     mfc1 $6 $f2
  2954.     bne $4 $6 fail
  2955.  
  2956.     lw $4 fp_sm1
  2957.     lw $5 fp_s1
  2958.     lwc1 $f0 fp_s0
  2959.     lwc1 $f2 fp_s1
  2960.     sub.s $f4 $f0 $f2
  2961.     mfc1 $6 $f4
  2962.     bne $4 $6 fail
  2963.     sub.s $f4 $f2 $f0
  2964.     mfc1 $6 $f4
  2965.     bne $5 $6 fail
  2966.  
  2967.     lw $4 fp_s1p5
  2968.     lwc1 $f0 fp_s1p5
  2969.     lwc1 $f2 fp_s3
  2970.     sub.s $f4 $f2 $f0
  2971.     mfc1 $6 $f4
  2972.     bne $4 $6 fail
  2973.  
  2974.  
  2975.     .data
  2976. sub.d_:    .asciiz "Testing SUB.D\n"
  2977.     .text
  2978.     li $v0 4    # syscall 4 (print_str)
  2979.     la $a0 sub.d_
  2980.     syscall
  2981.  
  2982.     lw $4 fp_d0
  2983.     lw $5 fp_d0+4
  2984.     lwc1 $f0 fp_d0
  2985.     lwc1 $f1 fp_d0+4
  2986.     sub.d $f2 $f0 $f0
  2987.     mfc1 $6 $f2
  2988.     mfc1 $7 $f3
  2989.     bne $4 $6 fail
  2990.     bne $5 $7 fail
  2991.  
  2992.     lw $4 fp_dm1
  2993.     lw $5 fp_dm1+4
  2994.     lwc1 $f0 fp_d0
  2995.     lwc1 $f1 fp_d0+4
  2996.     lwc1 $f2 fp_d1
  2997.     lwc1 $f3 fp_d1+4
  2998.     sub.d $f4 $f0 $f2
  2999.     mfc1 $6 $f4
  3000.     mfc1 $7 $f5
  3001.     bne $4 $6 fail
  3002.     bne $5 $7 fail
  3003.     lw $4 fp_d1
  3004.     lw $5 fp_d1+4
  3005.     sub.d $f4 $f2 $f0
  3006.     mfc1 $6 $f4
  3007.     mfc1 $7 $f5
  3008.     bne $4 $6 fail
  3009.     bne $5 $7 fail
  3010.  
  3011.     lw $4 fp_d1p5
  3012.     lw $5 fp_d1p5+4
  3013.     lwc1 $f0 fp_d1p5
  3014.     lwc1 $f1 fp_d1p5+4
  3015.     lwc1 $f2 fp_d3
  3016.     lwc1 $f3 fp_d3+4
  3017.     sub.d $f4 $f2 $f0
  3018.     mfc1 $6 $f4
  3019.     mfc1 $7 $f5
  3020.     bne $4 $6 fail
  3021.     bne $5 $7 fail
  3022.  
  3023.  
  3024. # SWC1 tested previously
  3025.  
  3026.  
  3027. #
  3028. # Testing Pseudo Ops
  3029. #
  3030.  
  3031.     .data
  3032. abs_:    .asciiz "Testing ABS\n"
  3033.     .text
  3034.     li $v0 4    # syscall 4 (print_str)
  3035.     la $a0 abs_
  3036.     syscall
  3037.  
  3038.     li $2 1
  3039.     abs $3 $2
  3040.     bne $3 1 fail
  3041.  
  3042.     li $2 -1
  3043.     abs $2 $2
  3044.     bne $2 1 fail
  3045.  
  3046.     li $2 0
  3047.     abs $2 $2
  3048.     bne $2 0 fail
  3049.  
  3050.  
  3051.     .data
  3052. b_:    .asciiz "Testing B\n"
  3053.     .text
  3054.     li $v0 4    # syscall 4 (print_str)
  3055.     la $a0 b_
  3056.     syscall
  3057.  
  3058.  
  3059.     b l101
  3060.     b fail
  3061. l101:
  3062.  
  3063.  
  3064.     .data
  3065. bal_:    .asciiz "Testing BAL\n"
  3066.     .text
  3067.     li $v0 4    # syscall 4 (print_str)
  3068.     la $a0 bal_
  3069.     syscall
  3070.  
  3071.     bal l102
  3072. l103:    j l104
  3073. l102:    la $4 l103
  3074.     bne $31 $4 fail
  3075.     jr $31
  3076. l104:
  3077.  
  3078.  
  3079.     .data
  3080. beqz_:    .asciiz "Testing BEQZ\n"
  3081.     .text
  3082.     li $v0 4    # syscall 4 (print_str)
  3083.     la $a0 beqz_
  3084.     syscall
  3085.  
  3086.     beqz $0 l105
  3087.     j fail
  3088. l105:    li $2 1
  3089.     beqz $2 fail
  3090.  
  3091.  
  3092.     .data
  3093. bge_:    .asciiz "Testing BGE\n"
  3094.     .text
  3095.     li $v0 4    # syscall 4 (print_str)
  3096.     la $a0 bge_
  3097.     syscall
  3098.  
  3099.     bge $0 $0 l106
  3100.     j fail
  3101. l106:    li $2 1
  3102.     bge $0 $2 fail
  3103.     bge $2 $0 l107
  3104.     j fail
  3105. l107:    li $3 -1
  3106.     bge $3 $2 fail
  3107.     bge $2 $3 l108
  3108.     j fail
  3109. l108:
  3110.  
  3111.     bge $0 0 l109
  3112.     j fail
  3113. l109:    li $2 1
  3114.     bge $0 1 fail
  3115.     bge $2 0 l110
  3116.     j fail
  3117. l110:    li $3 -1
  3118.     bge $3 1 fail
  3119.     bge $2 -1 l111
  3120.     j fail
  3121. l111:
  3122.  
  3123.  
  3124.     .data
  3125. bgeu_:    .asciiz "Testing BGEU\n"
  3126.     .text
  3127.     li $v0 4    # syscall 4 (print_str)
  3128.     la $a0 bgeu_
  3129.     syscall
  3130.  
  3131.     bgeu $0 $0 l112
  3132.     j fail
  3133. l112:    li $2 1
  3134.     bgeu $0 $2 fail
  3135.     bgeu $2 $0 l113
  3136.     j fail
  3137. l113:    li $3 -1
  3138.     bgeu $2 $3 fail
  3139.     bgeu $3 $2 l114
  3140.     j fail
  3141. l114:
  3142.  
  3143.     bgeu $0 0 l115
  3144.     j fail
  3145. l115:    li $2 1
  3146.     bgeu $0 1 fail
  3147.     bgeu $2 0 l116
  3148.     j fail
  3149. l116:    li $3 -1
  3150.     bgeu $2 -1 fail
  3151.     bgeu $3 1 l117
  3152.     j fail
  3153. l117:
  3154.  
  3155.  
  3156.     .data
  3157. bgt_:    .asciiz "Testing BGT\n"
  3158.     .text
  3159.     li $v0 4    # syscall 4 (print_str)
  3160.     la $a0 bgt_
  3161.     syscall
  3162.  
  3163.     bgt $0 $0 fail
  3164. l120:    li $2 1
  3165.     bgt $0 $2 fail
  3166.     bgt $2 $0 l121
  3167.     j fail
  3168. l121:    li $3 -1
  3169.     bgt $3 $2 fail
  3170.     bgt $2 $3 l122
  3171.     j fail
  3172. l122:
  3173.  
  3174.     bgt $0 0 fail
  3175. l123:    li $2 1
  3176.     bgt $0 1 fail
  3177.     bgt $2 0 l124
  3178.     j fail
  3179. l124:    li $3 -1
  3180.     bgt $3 1 fail
  3181.     bgt $2 -1 l125
  3182.     j fail
  3183. l125:
  3184.  
  3185.  
  3186.     .data
  3187. bgtu_:    .asciiz "Testing BGTU\n"
  3188.     .text
  3189.     li $v0 4    # syscall 4 (print_str)
  3190.     la $a0 bgtu_
  3191.     syscall
  3192.  
  3193.     bgtu $0 $0 fail
  3194. l132:    li $2 1
  3195.     bgtu $0 $2 fail
  3196.     bgtu $2 $0 l133
  3197.     j fail
  3198. l133:    li $3 -1
  3199.     bgtu $2 $3 fail
  3200.     bgtu $3 $2 l134
  3201.     j fail
  3202. l134:
  3203.  
  3204.     bgtu $0 0 fail
  3205. l135:    li $2 1
  3206.     bgtu $0 1 fail
  3207.     bgtu $2 0 l136
  3208.     j fail
  3209. l136:    li $3 -1
  3210.     bgtu $2 -1 fail
  3211.     bgtu $3 1 l137
  3212.     j fail
  3213. l137:
  3214.  
  3215.  
  3216.     .data
  3217. ble_:    .asciiz "Testing BLE\n"
  3218.     .text
  3219.     li $v0 4    # syscall 4 (print_str)
  3220.     la $a0 ble_
  3221.     syscall
  3222.  
  3223.     ble $0 $0 l140
  3224.     j fail
  3225. l140:    li $2 1
  3226.     ble $2 $0 fail
  3227.     ble $0 $2 l141
  3228.     j fail
  3229. l141:    li $3 -1
  3230.     ble $2 $3 fail
  3231.     ble $3 $2 l142
  3232.     j fail
  3233. l142:
  3234.  
  3235.     ble $0 0 l143
  3236.     j fail
  3237. l143:    li $2 1
  3238.     ble $2 0 fail
  3239.     ble $0 1 l144
  3240.     j fail
  3241. l144:    li $3 -1
  3242.     ble $2 -1 fail
  3243.     ble $3 1 l145
  3244.     j fail
  3245. l145:
  3246.  
  3247.  
  3248.     .data
  3249. bleu_:    .asciiz "Testing BLEU\n"
  3250.     .text
  3251.     li $v0 4    # syscall 4 (print_str)
  3252.     la $a0 bleu_
  3253.     syscall
  3254.  
  3255.     bleu $0 $0 l152
  3256.     j fail
  3257. l152:    li $2 1
  3258.     bleu $2 $0 fail
  3259.     bleu $0 $2 l153
  3260.     j fail
  3261. l153:    li $3 -1
  3262.     bleu $3 $2 fail
  3263.     bleu $2 $3 l154
  3264.     j fail
  3265. l154:
  3266.  
  3267.     bleu $0 0 l155
  3268.     j fail
  3269. l155:    li $2 1
  3270.     bleu $2 0 fail
  3271.     bleu $0 1 l156
  3272.     j fail
  3273. l156:    li $3 -1
  3274.     bleu $3 1 fail
  3275.     bleu $2 -1 l157
  3276.     j fail
  3277. l157:
  3278.  
  3279.  
  3280.     .data
  3281. blt_:    .asciiz "Testing BLT\n"
  3282.     .text
  3283.     li $v0 4    # syscall 4 (print_str)
  3284.     la $a0 blt_
  3285.     syscall
  3286.  
  3287.     blt $0 $0 fail
  3288. l160:    li $2 1
  3289.     blt $2 $0 fail
  3290.     blt $0 $2 l161
  3291.     j fail
  3292. l161:    li $3 -1
  3293.     blt $2 $3 fail
  3294.     blt $3 $2 l162
  3295.     j fail
  3296. l162:
  3297.  
  3298.     blt $0 0 fail
  3299. l163:    li $2 1
  3300.     blt $2 0 fail
  3301.     blt $0 1 l164
  3302.     j fail
  3303. l164:    li $3 -1
  3304.     blt $2 -1 fail
  3305.     blt $3 1 l165
  3306.     j fail
  3307. l165:
  3308.  
  3309.  
  3310.     .data
  3311. bltu_:    .asciiz "Testing BLTU\n"
  3312.     .text
  3313.     li $v0 4    # syscall 4 (print_str)
  3314.     la $a0 bltu_
  3315.     syscall
  3316.  
  3317.     bltu $0 $0 fail
  3318. l172:    li $2 1
  3319.     bltu $2 $0 fail
  3320.     bltu $0 $2 l173
  3321.     j fail
  3322. l173:    li $3 -1
  3323.     bltu $3 $2 fail
  3324.     bltu $2 $3 l174
  3325.     j fail
  3326. l174:
  3327.  
  3328.     bltu $0 0 fail
  3329. l175:    li $2 1
  3330.     bltu $2 0 fail
  3331.     bltu $0 1 l176
  3332.     j fail
  3333. l176:    li $3 -1
  3334.     bltu $3 1 fail
  3335.     bltu $2 -1 l177
  3336.     j fail
  3337. l177:
  3338.  
  3339.  
  3340.     .data
  3341. bnez_:    .asciiz "Testing BNEZ\n"
  3342.     .text
  3343.     li $v0 4    # syscall 4 (print_str)
  3344.     la $a0 bnez_
  3345.     syscall
  3346.  
  3347.     bnez $0 fail
  3348.     li $2 1
  3349.     bnez $2 l180
  3350.     j fail
  3351. l180:
  3352.  
  3353.  
  3354. # DIV and DIVU checked previously
  3355.  
  3356.  
  3357.     .data
  3358. l_s_:    .asciiz "Testing L_S\n"
  3359.     .text
  3360.     li $v0 4    # syscall 4 (print_str)
  3361.     la $a0 l_s_
  3362.     syscall
  3363.  
  3364.     lw $2 fp_s1p5
  3365.     l.s $f0 fp_s1p5
  3366.     mfc1 $4 $f0
  3367.     bne $2 $4 fail
  3368.  
  3369.     .data
  3370. l_d_:    .asciiz "Testing L_D\n"
  3371.     .text
  3372.     li $v0 4    # syscall 4 (print_str)
  3373.     la $a0 l_d_
  3374.     syscall
  3375.  
  3376.     lw $2 fp_d1p5
  3377.     lw $3 fp_d1p5+4
  3378.     l.d $f0 fp_d1p5
  3379.     mfc1 $4 $f0
  3380.     mfc1 $5 $f1
  3381.     bne $2 $4 fail
  3382.     bne $3 $5 fail
  3383.  
  3384.  
  3385. # LA better work or nothing above will work
  3386.  
  3387.  
  3388.     .data
  3389. li_:    .asciiz "Testing LI\n"
  3390.     .text
  3391.     li $v0 4    # syscall 4 (print_str)
  3392.     la $a0 li_
  3393.     syscall
  3394.  
  3395.     li $2 0xfffffff
  3396.     bne $2 0xfffffff fail
  3397.     li $2 0xffffffe
  3398.     bne $2 0xffffffe fail
  3399.     li $2 0
  3400.     bnez $2 fail
  3401.     li $2 0x7fffffff
  3402.     bne $2 0x7fffffff fail
  3403.     li $2 32767
  3404.     bne $2 32767 fail
  3405.     li $2 32768
  3406.     bne $2 32768 fail
  3407.     li $2 65535
  3408.     bne $2 65535 fail
  3409.     li $2 65536
  3410.     bne $2 65536 fail
  3411.  
  3412.  
  3413.     .data
  3414. li.d_:    .asciiz "Testing LI.d\n"
  3415.     .text
  3416.     li $v0 4    # syscall 4 (print_str)
  3417.     la $a0 li.d_
  3418.     syscall
  3419.  
  3420.     li.d $f0 1.0
  3421.     mfc1 $2, $f0
  3422.     mfc1 $3, $f1
  3423.     lw $4, fp_d1
  3424.     lw $5, fp_d1+4
  3425.     bne $2 $4 fail
  3426.     bne $3 $5 fail
  3427.  
  3428.     li.d $f0 -1.0
  3429.     mfc1 $2, $f0
  3430.     mfc1 $3, $f1
  3431.     lw $4, fp_dm1
  3432.     lw $5, fp_dm1+4
  3433.     bne $2 $4 fail
  3434.     bne $3 $5 fail
  3435.  
  3436.  
  3437.     .data
  3438. li.s_:    .asciiz "Testing LI.s\n"
  3439.     .text
  3440.     li $v0 4    # syscall 4 (print_str)
  3441.     la $a0 li.s_
  3442.     syscall
  3443.  
  3444.     li.s $f0 1.0
  3445.     mfc1 $2, $f0
  3446.     lw $3, fp_s1
  3447.     bne $2 $3 fail
  3448.  
  3449.     li.s $f0 -1.0
  3450.     mfc1 $2, $f0
  3451.     lw $3, fp_sm1
  3452.     bne $2 $3 fail
  3453.  
  3454.  
  3455.     .data
  3456. move_:    .asciiz "Testing MOVE\n"
  3457.     .text
  3458.     li $v0 4    # syscall 4 (print_str)
  3459.     la $a0 move_
  3460.     syscall
  3461.  
  3462.     li $2 0xfffffff
  3463.     move $3 $2
  3464.     bne $2 $3 fail
  3465.  
  3466.  
  3467. # MUL and MULO and MULOU were tested previously
  3468.  
  3469.  
  3470.     .data
  3471. neg_:    .asciiz "Testing NEG\n"
  3472.     .text
  3473.     li $v0 4    # syscall 4 (print_str)
  3474.     la $a0 neg_
  3475.     syscall
  3476.  
  3477.     li $2 -101
  3478.     neg $3 $2
  3479.     bne $3 101 fail
  3480.     li $2 101
  3481.     neg $2 $2
  3482.     bne $2 -101 fail
  3483.     neg $2 $0
  3484.     bne $2 0 fail
  3485.  
  3486.  
  3487.     .data
  3488. negu_:    .asciiz "Testing NEGU\n"
  3489.     .text
  3490.     li $v0 4    # syscall 4 (print_str)
  3491.     la $a0 negu_
  3492.     syscall
  3493.  
  3494.     li $2 -101
  3495.     negu $3 $2
  3496.     bne $3 101 fail
  3497.     li $2 101
  3498.     negu $2 $2
  3499.     bne $2 -101 fail
  3500.     negu $2 $0
  3501.     bne $2 0 fail
  3502.  
  3503.     .data
  3504. nop_:    .asciiz "Testing NOP\n"
  3505.     .text
  3506.     li $v0 4    # syscall 4 (print_str)
  3507.     la $a0 nop_
  3508.     syscall
  3509.  
  3510.     nop        # How do we test it??
  3511.  
  3512.  
  3513.     .data
  3514. not_:    .asciiz "Testing NOT\n"
  3515.     .text
  3516.     li $v0 4    # syscall 4 (print_str)
  3517.     la $a0 not_
  3518.     syscall
  3519.  
  3520.     not $2 $0
  3521.     bne $2 0xffffffff fail
  3522.     li $2 0
  3523.     not $3 $2
  3524.     bne $3 0xffffffff fail
  3525.     li $2 0xffffffff
  3526.     not $3 $2
  3527.     bne $3 0 fail
  3528.  
  3529.  
  3530.     .data
  3531. rem_:    .asciiz "Testing REM\n"
  3532.     .text
  3533.     li $v0 4    # syscall 4 (print_str)
  3534.     la $a0 rem_
  3535.     syscall
  3536.  
  3537.     li $2 5
  3538.     li $3 2
  3539.     li $4 -2
  3540.  
  3541.     rem $5 $2 $3
  3542.     bne $5 1 fail
  3543.  
  3544.     rem $5 $2 $4
  3545.     bne $5 1 fail
  3546.  
  3547.     .data
  3548. remu_:    .asciiz "Testing REMU\n"
  3549.     .text
  3550.     li $v0 4    # syscall 4 (print_str)
  3551.     la $a0 remu_
  3552.     syscall
  3553.  
  3554.     li $2 5
  3555.     li $3 2
  3556.     li $4 -2
  3557.  
  3558.     remu $5 $2 $3
  3559.     bne $5 1 fail
  3560.  
  3561.     remu $5 $2 $4
  3562.     bne $5 5 fail
  3563.  
  3564.  
  3565.     .data
  3566. rol_:    .asciiz "Testing ROL\n"
  3567.     .text
  3568.     li $v0 4    # syscall 4 (print_str)
  3569.     la $a0 rol_
  3570.     syscall
  3571.     li $2 5
  3572.     li $3 5
  3573.     rol $4 $2 $3
  3574.     bne $4 0xa0 fail
  3575.     li $2 5
  3576.     li $3 -5
  3577.     rol $4 $2 $3
  3578.     bne $4 0x28000000 fail
  3579.     li $2 5
  3580.     rol $4 $2 5
  3581.     bne $4 0xa0 fail
  3582.     li $2 5
  3583.     rol $4 $2 -5
  3584.     bne $4 0x28000000 fail
  3585.  
  3586.  
  3587.     .data
  3588. ror_:    .asciiz "Testing ROR\n"
  3589.     .text
  3590.     li $v0 4    # syscall 4 (print_str)
  3591.     la $a0 ror_
  3592.     syscall
  3593.     li $2 5
  3594.     li $3 5
  3595.     ror $4 $2 $3
  3596.     bne $4 0x28000000 fail
  3597.     li $2 5
  3598.     li $3 -5
  3599.     ror $4 $2 $3
  3600.     bne $4 0xa0 fail
  3601.     li $2 5
  3602.     ror $4 $2 5
  3603.     bne $4 0x28000000 fail
  3604.     li $2 5
  3605.     ror $4 $2 -5
  3606.     bne $4 0xa0 fail
  3607.  
  3608.  
  3609.     .data
  3610. s_s_:    .asciiz "Testing S_S\n"
  3611. foo:    .word 0
  3612.     .text
  3613.     li $v0 4    # syscall 4 (print_str)
  3614.     la $a0 s_s_
  3615.     syscall
  3616.  
  3617.     lw $2 fp_s1p5
  3618.     mtc1 $2 $0
  3619.     s.s $f0 foo
  3620.     lw $4 foo
  3621.     bne $2 $4 fail
  3622.  
  3623.     .data
  3624. s_d_:    .asciiz "Testing S_D\n"
  3625. bar:    .word 0 0
  3626.     .text
  3627.     li $v0 4    # syscall 4 (print_str)
  3628.     la $a0 s_d_
  3629.     syscall
  3630.  
  3631.     lw $2 fp_d1p5
  3632.     lw $3 fp_d1p5+4
  3633.     mtc1 $2 $0
  3634.     mtc1 $3 $1
  3635.     s.d $f0 bar
  3636.     lw $4 bar
  3637.     lw $5 bar+4
  3638.  
  3639.     bne $2 $4 fail
  3640.     bne $3 $5 fail
  3641.  
  3642.  
  3643.     .data
  3644. seq_:    .asciiz "Testing SEQ\n"
  3645.     .text
  3646.     li $v0 4    # syscall 4 (print_str)
  3647.     la $a0 seq_
  3648.     syscall
  3649.  
  3650.     li $2 -1
  3651.     li $3 1
  3652.  
  3653.     seq $4 $0 $0
  3654.     beqz $4 fail
  3655.     seq $4 $2 $3
  3656.     bnez $4 fail
  3657.  
  3658.     seq $4 $0 0
  3659.     beqz $4 fail
  3660.     seq $4 $3 2
  3661.     bnez $4 fail
  3662.  
  3663.  
  3664.     .data
  3665. sge_:    .asciiz "Testing SGE\n"
  3666.     .text
  3667.     li $v0 4    # syscall 4 (print_str)
  3668.     la $a0 sge_
  3669.     syscall
  3670.  
  3671.     sge $4 $0 $0
  3672.     beqz $4 fail
  3673.     li $2 1
  3674.     sge $4 $0 $2
  3675.     bnez $4 fail
  3676.     sge $4 $2 $0
  3677.     beqz $4 fail
  3678.     li $2 -1
  3679.     sge $4 $0 $2
  3680.     beqz $4 fail
  3681.     sge $4 $2 $0
  3682.     bnez $4 fail
  3683.  
  3684.     li $2 1
  3685.     sge $2 $0 $2
  3686.     bnez $2 fail
  3687.     li $2 1
  3688.     sge $2 $2 $0
  3689.     beqz $2 fail
  3690.     li $2 -1
  3691.     sge $2 $0 $2
  3692.     beqz $2 fail
  3693.     li $2 -1
  3694.     sge $2 $2 $0
  3695.     bnez $2 fail
  3696.  
  3697.     sge $4 $0 0
  3698.     beqz $4 fail
  3699.     li $2 1
  3700.     sge $4 $0 1
  3701.     bnez $4 fail
  3702.     sge $4 $2 0
  3703.     beqz $4 fail
  3704.     li $2 -1
  3705.     sge $4 $0 -1
  3706.     beqz $4 fail
  3707.     sge $4 $2 0
  3708.     bnez $4 fail
  3709.  
  3710.  
  3711.     .data
  3712. sgeu_:    .asciiz "Testing SGEU\n"
  3713.     .text
  3714.     li $v0 4    # syscall 4 (print_str)
  3715.     la $a0 sgeu_
  3716.     syscall
  3717.  
  3718.     sgeu $4 $0 $0
  3719.     beqz $4 fail
  3720.     li $2 1
  3721.     sgeu $4 $0 $2
  3722.     bnez $4 fail
  3723.     sgeu $4 $2 $0
  3724.     beqz $4 fail
  3725.     li $2 -1
  3726.     sgeu $4 $0 $2
  3727.     bnez $4 fail
  3728.     sgeu $4 $2 $0
  3729.     beqz $4 fail
  3730.  
  3731.     sgeu $4 $0 0
  3732.     beqz $4 fail
  3733.     li $2 1
  3734.     sgeu $4 $0 1
  3735.     bnez $4 fail
  3736.     sgeu $4 $2 0
  3737.     beqz $4 fail
  3738.     li $2 -1
  3739.     sgeu $4 $0 -1
  3740.     bnez $4 fail
  3741.     sgeu $4 $2 0
  3742.     beqz $4 fail
  3743.  
  3744.  
  3745.     .data
  3746. sgt_:    .asciiz "Testing SGT\n"
  3747.     .text
  3748.     li $v0 4    # syscall 4 (print_str)
  3749.     la $a0 sgt_
  3750.     syscall
  3751.  
  3752.     sgt $4 $0 $0
  3753.     bnez $4 fail
  3754.     li $2 1
  3755.     sgt $4 $0 $2
  3756.     bnez $4 fail
  3757.     sgt $4 $2 $0
  3758.     beqz $4 fail
  3759.     li $2 -1
  3760.     sgt $4 $0 $2
  3761.     beqz $4 fail
  3762.     sgt $4 $2 $0
  3763.     bnez $4 fail
  3764.  
  3765.     sgt $4 $0 0
  3766.     bnez $4 fail
  3767.     sgt $4 $0 1
  3768.     bnez $4 fail
  3769.     li $2 1
  3770.     sgt $4 $2 0
  3771.     beqz $4 fail
  3772.     sgt $4 $0 -1
  3773.     beqz $4 fail
  3774.     li $2 -1
  3775.     sgt $4 $2 0
  3776.     bnez $4 fail
  3777.  
  3778.  
  3779.     .data
  3780. sgtu_:    .asciiz "Testing SGTU\n"
  3781.     .text
  3782.     li $v0 4    # syscall 4 (print_str)
  3783.     la $a0 sgtu_
  3784.     syscall
  3785.  
  3786.     sgtu $4 $0 $0
  3787.     bnez $4 fail
  3788.     li $2 1
  3789.     sgtu $4 $0 $2
  3790.     bnez $4 fail
  3791.     sgtu $4 $2 $0
  3792.     beqz $4 fail
  3793.     li $2 -1
  3794.     sgtu $4 $0 $2
  3795.     bnez $4 fail
  3796.     sgtu $4 $2 $0
  3797.     beqz $4 fail
  3798.  
  3799.     sgtu $4 $0 0
  3800.     bnez $4 fail
  3801.     sgtu $4 $0 1
  3802.     bnez $4 fail
  3803.     li $2 1
  3804.     sgtu $4 $2 0
  3805.     beqz $4 fail
  3806.     sgtu $4 $0 -1
  3807.     bnez $4 fail
  3808.     li $2 -1
  3809.     sgtu $4 $2 0
  3810.     beqz $4 fail
  3811.  
  3812.  
  3813.     .data
  3814. sle_:    .asciiz "Testing SLE\n"
  3815.     .text
  3816.     li $v0 4    # syscall 4 (print_str)
  3817.     la $a0 sle_
  3818.     syscall
  3819.  
  3820.     sle $4 $0 $0
  3821.     beqz $4 fail
  3822.     li $2 1
  3823.     sle $4 $0 $2
  3824.     beqz $4 fail
  3825.     sle $4 $2 $0
  3826.     bnez $4 fail
  3827.     li $2 -1
  3828.     sle $4 $0 $2
  3829.     bnez $4 fail
  3830.     sle $4 $2 $0
  3831.     beqz $4 fail
  3832.  
  3833.     li $2 1
  3834.     sle $2 $0 $2
  3835.     beqz $2 fail
  3836.     li $2 1
  3837.     sle $2 $2 $0
  3838.     bnez $2 fail
  3839.     li $2 -1
  3840.     sle $2 $0 $2
  3841.     bnez $2 fail
  3842.     li $2 -1
  3843.     sle $2 $2 $0
  3844.     beqz $2 fail
  3845.  
  3846.     sle $4 $0 0
  3847.     beqz $4 fail
  3848.     li $2 1
  3849.     sle $4 $0 1
  3850.     beqz $4 fail
  3851.     sle $4 $2 0
  3852.     bnez $4 fail
  3853.     li $2 -1
  3854.     sle $4 $0 -1
  3855.     bnez $4 fail
  3856.     sle $4 $2 0
  3857.     beqz $4 fail
  3858.  
  3859.  
  3860.     .data
  3861. sleu_:    .asciiz "Testing SLEU\n"
  3862.     .text
  3863.     li $v0 4    # syscall 4 (print_str)
  3864.     la $a0 sleu_
  3865.     syscall
  3866.  
  3867.     sleu $4 $0 $0
  3868.     beqz $4 fail
  3869.     li $2 1
  3870.     sleu $4 $0 $2
  3871.     beqz $4 fail
  3872.     sleu $4 $2 $0
  3873.     bnez $4 fail
  3874.     li $2 -1
  3875.     sleu $4 $0 $2
  3876.     beqz $4 fail
  3877.     sleu $4 $2 $0
  3878.     bnez $4 fail
  3879.  
  3880.     sleu $4 $0 0
  3881.     beqz $4 fail
  3882.     li $2 1
  3883.     sleu $4 $0 1
  3884.     beqz $4 fail
  3885.     sleu $4 $2 0
  3886.     bnez $4 fail
  3887.     li $2 -1
  3888.     sleu $4 $0 -1
  3889.     beqz $4 fail
  3890.     sleu $4 $2 0
  3891.     bnez $4 fail
  3892.  
  3893.  
  3894.     .data
  3895. sne_:    .asciiz "Testing SNE\n"
  3896.     .text
  3897.     li $v0 4    # syscall 4 (print_str)
  3898.     la $a0 sne_
  3899.     syscall
  3900.  
  3901.     li $2 -1
  3902.     li $3 1
  3903.  
  3904.     sne $4 $0 $0
  3905.     bnez $4 fail
  3906.     sne $4 $2 $3
  3907.     beqz $4 fail
  3908.  
  3909.     sne $4 $0 0
  3910.     bnez $4 fail
  3911.     sne $4 $3 2
  3912.     beqz $4 fail
  3913.  
  3914.  
  3915.     .data
  3916. ulh_:    .asciiz "Testing ULH\n"
  3917. ulh1_:    .byte 1 2 3 4 5 6 7 8
  3918. ulh2_:    .byte 0xff 0xff
  3919.     .text
  3920.  
  3921.     li $v0 4    # syscall 4 (print_str)
  3922.     la $a0 ulh_
  3923.     syscall
  3924.     la $2 ulh1_
  3925.     ulh $3 0($2)
  3926.     bne $3 0x0102 fail
  3927.     ulh $3 1($2)
  3928.     bne $3 0x0203 fail
  3929.     ulh $3 2($2)
  3930.     bne $3 0x0304 fail
  3931.     ulh $3 3($2)
  3932.     bne $3 0x0405 fail
  3933.     ulh $3 4($2)
  3934.     bne $3 0x0506 fail
  3935.     la $2 ulh2_
  3936.     ulh $3 0($2)
  3937.     bne $3 -1 fail
  3938.  
  3939.  
  3940.     .data
  3941. ulhu_:    .asciiz "Testing ULHU\n"
  3942.     .text
  3943.     li $v0 4    # syscall 4 (print_str)
  3944.     la $a0 ulhu_
  3945.     syscall
  3946.  
  3947.     li $v0 4    # syscall 4 (print_str)
  3948.     la $a0 ulhu_
  3949.     syscall
  3950.     la $2 ulh1_
  3951.     ulhu $3 0($2)
  3952.     bne $3 0x0102 fail
  3953.     ulhu $3 1($2)
  3954.     bne $3 0x0203 fail
  3955.     ulhu $3 2($2)
  3956.     bne $3 0x0304 fail
  3957.     ulhu $3 3($2)
  3958.     bne $3 0x0405 fail
  3959.     ulhu $3 4($2)
  3960.     bne $3 0x0506 fail
  3961.     la $2 ulh2_
  3962.     ulhu $3 0($2)
  3963.     bne $3 0xffff fail
  3964.  
  3965.  
  3966.     .data
  3967. ulw_:    .asciiz "Testing ULW\n"
  3968.     .text
  3969.     li $v0 4    # syscall 4 (print_str)
  3970.     la $a0 ulw_
  3971.     syscall
  3972.  
  3973.     la $2 ulh1_
  3974.     ulw $3 0($2)
  3975.     bne $3 0x1020304 fail
  3976.     ulw $3 1($2)
  3977.     bne $3 0x2030405 fail
  3978.     ulw $3 2($2)
  3979.     bne $3 0x3040506 fail
  3980.     ulw $3 3($2)
  3981.     bne $3 0x4050607 fail
  3982.  
  3983.  
  3984.     .data
  3985. ush_:    .asciiz "Testing USH\n"
  3986. ushd:    .word 0 0
  3987.     .text
  3988.     li $v0 4    # syscall 4 (print_str)
  3989.     la $a0 ush_
  3990.     syscall
  3991.  
  3992.     la $2 ushd
  3993.     sw $0 0($2)
  3994.     sw $0 4($2)
  3995.     li $3 -1
  3996.     ush $3 0($2)
  3997.     lw $4 0($2)
  3998.     bne $4 0xffff0000 fail
  3999.     lw $4 4($2)
  4000.     bne $4 0 fail
  4001.  
  4002.     sw $0 0($2)
  4003.     sw $0 4($2)
  4004.     li $3 -1
  4005.     ush $3 1($2)
  4006.     lw $4 0($2)
  4007.     bne $4 0xffff00 fail
  4008.     lw $4 4($2)
  4009.     bne $4 0 fail
  4010.  
  4011.     sw $0 0($2)
  4012.     sw $0 4($2)
  4013.     li $3 -1
  4014.     ush $3 2($2)
  4015.     lw $4 0($2)
  4016.     bne $4 0xffff fail
  4017.     lw $4 4($2)
  4018.     bne $4 0 fail
  4019.  
  4020.     sw $0 0($2)
  4021.     sw $0 4($2)
  4022.     li $3 -1
  4023.     ush $3 3($2)
  4024.     lw $4 0($2)
  4025.     bne $4 0xff fail
  4026.     lw $4 4($2)
  4027.     bne $4 0xff000000 fail
  4028.  
  4029.  
  4030.     .data
  4031. usw_:    .asciiz "Testing USW\n"
  4032.     .text
  4033.     li $v0 4    # syscall 4 (print_str)
  4034.     la $a0 usw_
  4035.     syscall
  4036.  
  4037.     la $2 ushd
  4038.     sw $0 0($2)
  4039.     sw $0 4($2)
  4040.     li $3 -1
  4041.     usw $3 0($2)
  4042.     lw $4 0($2)
  4043.     bne $4 -1 fail
  4044.     lw $4 4($2)
  4045.     bne $4 0 fail
  4046.  
  4047.     sw $0 0($2)
  4048.     sw $0 4($2)
  4049.     li $3 -1
  4050.     usw $3 1($2)
  4051.     lw $4 0($2)
  4052.     bne $4 0xffffff fail
  4053.     lw $4 4($2)
  4054.     bne $4 0xff000000 fail
  4055.  
  4056.     sw $0 0($2)
  4057.     sw $0 4($2)
  4058.     li $3 -1
  4059.     usw $3 2($2)
  4060.     lw $4 0($2)
  4061.     bne $4 0xffff fail
  4062.     lw $4 4($2)
  4063.     bne $4 0xffff0000 fail
  4064.  
  4065.     sw $0 0($2)
  4066.     sw $0 4($2)
  4067.     li $3 -1
  4068.     usw $3 3($2)
  4069.     lw $4 0($2)
  4070.     bne $4 0xff fail
  4071.     lw $4 4($2)
  4072.     bne $4 0xffffff00 fail
  4073.  
  4074.     .data
  4075. word_:    .asciiz "Testing .WORD\n"
  4076.     .text
  4077.     li $v0 4    # syscall 4 (print_str)
  4078.     la $a0 word_
  4079.     syscall
  4080.  
  4081.     .data
  4082.     .align 0
  4083. wordd:    .byte 0x1
  4084.     .word 0x87654320
  4085.     .word 0xfedcba90
  4086.     .text
  4087.     la $2 wordd
  4088.     lwr $3 1($2)
  4089.     lwl $3 0($2)
  4090.     bne $3 0x01876543 fail
  4091.     lwr $3 5($2)
  4092.     lwl $3 4($2)
  4093.     bne $3 0x20fedcba fail
  4094.  
  4095.     .data
  4096.     .byte 0
  4097. x:    .word OK    # Forward reference in unaligned data!
  4098.     .text
  4099.     lw $8 x
  4100.     beq $8 $0 fail
  4101. OK:
  4102.  
  4103.  
  4104. # Done !!!
  4105.     .data
  4106. sm:    .asciiz "\nPassed all tests\n"
  4107.     .text
  4108.     li $v0 4    # syscall 4 (print_str)
  4109.     la $a0 sm
  4110.     syscall
  4111.     lw $31 saved_ret_pc
  4112.     jr $31        # Return from main
  4113.  
  4114.  
  4115.     .data
  4116. fm:    .asciiz "Failed test\n"
  4117.     .text
  4118. fail:    li $v0 4    # syscall 4 (print_str)
  4119.     la $a0 fm
  4120.     syscall
  4121.     li $v0, 10    # syscall 10 (exit)
  4122.     syscall
  4123.  
  4124.  
  4125.     .text 0x408000
  4126. far_away:
  4127.     beq $0, $0, come_back
  4128.